Heim  >  Artikel  >  Java  >  Der Weg des Java-Architekten – aktuelle Grenztechnologie und verschiedene Programmiersprachen

Der Weg des Java-Architekten – aktuelle Grenztechnologie und verschiedene Programmiersprachen

巴扎黑
巴扎黑Original
2017-06-26 11:48:441950Durchsuche

Die derzeit auf dem Markt befindlichen Programmiersprachen sind hauptsächlich objektorientiert. Objektorientiert muss mit einigen der grundlegendsten Dinge beginnen. Ich habe zum Beispiel im Alter von 24 Jahren geheiratet, wie könnte ich sonst objektorientierte Programmierung betreiben? Und dann bekommt man direkt nach der Heirat ein Baby. Was ist, wenn der Partner wegläuft? Wenn Erschaffung und Zerstörung teuer sind, ist es besser, ein Kind zu haben und weiterhin einen Bezug zum Objekt zu haben.

Warum reden manche Menschen lange, während andere nur ab und zu reden? Meiner Beobachtung nach entwickeln sich zwei Menschen, die nahezu gleich gut arbeiten, in Zukunft besser. Lassen Sie uns die Gründe anhand konkreter Beispiele ergründen.

Wenn man mit Freunden chattet, hat Renren, das vor ein paar Jahren herauskam, immer einen gewissen technischen Geek-Geist. Lasst uns über Technologie plaudern. Die Leute fragen mich, wie Ihre Videos gespeichert und abgespielt werden. Ich sagte, dass ich nur an Inhalten und Meta arbeite und der Rest nichts mit mir zu tun hat. Tian'er plauderte zu Tode und sein Muster passte. Wenn es für das, was ich mache, eine Entwicklungsplattform gibt, dann gehört dazu auch das Hochladen von Videos. Rufen Sie zunächst die Cloud-Speicherschnittstelle zur Initialisierung auf und sie senden uns eine URL zum Hochladen von Videomedien zurück. Die JS-Seite lädt Medienfragmente auf die URL hoch. Wenn das Netzwerk unterbrochen ist oder der Browser geschlossen ist oder so etwas, können Sie die Schnittstelle zum Hochladen von Lebensläufen aufrufen, um mit dem Hochladen über die neu zurückgegebene URL fortzufahren. Die Lebenslaufübertragungsschnittstelle trägt die Gesamtdateigröße und die Größe der bisher empfangenen Dateien. Damit kann JS bestimmen, von welchem ​​Fragment aus die Übertragung fortgesetzt werden soll. Die Cloud-Speicherung erfolgt in einer anderen Abteilung. Sie sind für die Kommunikation mit der Cloud-Transkodierungsabteilung verantwortlich, die die Konvertierung von Original-HD-Dateien in verschiedene Bitraten und die digitale DRM-Rechteverwaltung betrifft Wie das geht, liegt in der Verantwortung der Cloud-Transkodierungsabteilung. Welche Strategien verwenden sie intern, um es an verschiedene DNS-Knoten zu verteilen? Wie die Planungsabteilung plant, die wertvollste Bandbreite der Video-Website einzusparen, ist mir über die genauen Details nicht ganz klar. Die Cloud-Transcoding-Abteilung übergibt uns die konvertierten Bitraten und Video-URLs in Form von MQ und wir speichern sie in der Datenbank.

Dann fragten sie noch einmal, was verwenden Sie für MQ? Ich spreche von Apaches qpidd. Ähm~~, wenn die Leute es nicht wissen, wird das Gespräch langweilig. Es muss also gesagt werden, dass MQ ähnlich ist und wie Rabbit MQ auf dem erweiterten AMQP-Nachrichtenwarteschlangenprotokoll basiert. Dies ist der einheitliche Cluster des Unternehmens und soll sehr bequem zu installieren und bereitzustellen sein. Mainstream-Programmiersprachen unterstützen es auch, also verwende ich es. Da es sich hauptsächlich um abteilungsübergreifende Kommunikation handelt, dient dies hauptsächlich der Bequemlichkeit und der Einsparung von Kommunikationskosten. Daher ist unser Nachrichtentext zuerst JSON-komprimiert und dann Base64. Wir verwenden auch nicht die Binärdateien von Protobuf, denn wenn wir auf ein Problem stoßen, ist die Binärdatei schlecht lesbar, es fehlt an Selbstbeschreibung und es ist nicht einfach, Fehler zu beheben.

Dienste mit hoher Parallelität müssen über einige Notfallpläne verfügen, z. B. Dienstunterbrechung, Verschlechterung, Isolierung, Strombegrenzung, asynchrones RPC usw. Für Dienstunterbrechungen, Downgrades und Isolierungen verwendet jeder lieber das Open-Source-Framework für verteilte Dienstelastizität Hystrix von Netflix. Hystrix kann auch den Datenverkehr einschränken. Aber unser Service verwendet zur Implementierung den RateLimiter von guava, einen ausgereiften Token-Bucket-Algorithmus.

Die Drosselung von Diensten ist eine sehr einfache Angelegenheit. Unser Code umfasst nur ein paar hundert Zeilen, enthält jedoch einen relativ vollständigen Satz von Designideen. Der Zweck besteht darin, eine feinkörnige Geschäftsstrombegrenzung basierend auf bestimmten Strategien (z. B. URL, Plattformquelle, URL + Plattformquelle) zu implementieren.

 

Dieser Interceptor definiert eine einzelne Instanz des aktuellen Limitinhabers Richtlinie und das konfigurierte Limit für jede oder jede Anfrage werden an den Interceptor zurückgegeben, der den entsprechenden Schlüssel und RateLimiter anfordert. Wenn der Abfangjäger feststellt, dass der Grenzwert überschritten ist, wird direkt ein Fehler zurückgegeben, ohne dass er zur Verarbeitung an den Controller übergeben wird. Ein Anforderungstyp, z. B. eine URL, ein RateLimiter für eine differenzierte Ratenbegrenzung.

Zusätzlich zu diesem aktuellen Limit auf Anwendungsebene können natürlich auch einige Einschränkungen des IP-Sitzungsraums, der Anforderungshäufigkeit und der Parallelität auf Nginx-Ebene implementiert werden. Wenn Sie auf einen Netzwerkangriff stoßen, versuchen Sie zunächst, das Problem auf der Betriebs- und Wartungsebene zu lösen, denn je höher die Ebene, desto geringer sind die Auswirkungen auf die Dienste.

Eine gute Softwarearchitektur kann die Qualität des Systems erfüllen, es den Begünstigten ermöglichen, konsistente Ziele zu erreichen, den Planungsprozess unterstützen, Leitlinien für die Systementwicklung bereitstellen, die Komplexität effektiv verwalten und den Grundstein für die Wiederverwendung legen Reduzieren Sie Wartungskosten und unterstützen Sie die Konfliktanalyse.

Die meisten Architekturen oder Programmiersprachen stammen aus Projekten. Beispielsweise bestand die ursprüngliche Absicht von Stroustrup, dem Erfinder von C++, bei der Entwicklung dieser Sprache darin, zu erkennen, dass die C-Sprache aufgrund unzumutbarer Initialisierungsparameter kritische Programmierprobleme verursacht. Solche Fehler sind schwer zu finden. Dieses Problem tritt auch beim Reinigen auf. Wenn Sie es tun und durchhalten, werden Sie tatsächlich Erfolg haben. Allerdings hat alles eine Formations- und Entwicklungsphase. Java wurde über Leistungsprobleme in älteren Versionen beschwert, und jede Java-Version geht mit Leistungsverbesserungen einher, sodass ein Upgrade der JVM kostenlose Leistungsvorteile bringen kann. Wenn es um Details geht, fällt mir das Schlüsselwort final ein. In früheren Versionen wurde der Teil des Schlüsselworts „inline“ genannt, wodurch die Funktion direkt erweitert wurde, ohne dass Parameter ständig in den Stapel verschoben und herausgenommen werden müssten verursachen Leistungseinbußen. Dies führt jedoch zu einem relativ großen Speicherplatzaufwand, wenn der Funktionskörper groß ist. Die JVM wurde seit 1.5 optimiert und das Schlüsselwort final ist für die Leistung nicht mehr so ​​wichtig. Es stellt sich heraus, dass es in der Firma einen Kollegen gibt, der sehr nett ist und tolle Ideen hat. Er sagte: „Einige meiner Ideen halte ich immer in einem Notizbuch fest, und wenn ich es mir dann nach einer Weile ansehe, werde ich feststellen, dass ich mich damals nur an eine der Ideen gehalten habe, sie umgesetzt habe und sie erfolgreich war.“ „Ich denke, er ist weiter vom Erfolg entfernt, als er denkt. Denn alles, was er hatte, war eine Idee, aber er hat sie nicht umgesetzt. Es scheint, dass es nur die Idee von JDK1.0 gibt, aber der Abstand zum Erfolg beträgt mindestens jdk1.5.

Python ist bekannt für seine geringe Codegröße, niedrige Wartungskosten und hohe Programmiereffizienz. Aber wie viele Programmiersprachen sind nicht auf niedrige Wartungskosten und hohe Programmiereffizienz optimiert? Da fragten mich die Leute, dass Suchmaschinen bereits in Flammen stehen. Kann man sich in Zukunft wirklich eigene Vorteile verschaffen? Ich kann nur sagen: Woher soll man das wissen, wenn man es nicht versucht? „Das Leben ist kurz, ich benutze Python“. Diese Funktionen von Python können mehr Zeit für die Erziehung von Mädchen gewinnen, aber das Leben ist kurz. Die Werbeworte der Python-Autoren verleihen Python Vitalität. Tatsächlich lässt sich die Einfachheit von Python an der Speicherwiederverwendung erkennen. Es verwendet die Referenzzählung, sodass es kein Problem mit zirkulären Referenzen gibt. Als ich bei Renren war, habe ich ein Python-Projekt gemacht. Es gab eine Zeit, da sagte unser Leiter, dass ich die Arbeit von acht Leuten alleine erledigt habe. Neben sämtlichen Wartungsarbeiten an der gesamten Website übernehme ich allerlei neue Aufträge. Aufgrund dieser Persönlichkeit haben andere wirklich keine Möglichkeit, zu mir zu kommen. Ich bringe nur mich selbst in Verlegenheit, nicht andere. Zu diesem Zeitpunkt arbeitete ich noch nicht einmal vier Jahre und programmierte weniger als zwei Jahre. Ich sagte, dass ich die ersten zwei Jahre meiner Arbeit als japanischer Übersetzer gearbeitet habe. Der Grund, warum wir zu jedem gehen können. Eines Tages kam ich gerade nach Peking und besuchte mit meinen Vorgesetzten den Sommerpalast. Plötzlich erhielt ich einen Anruf von Renren.com. Die Person am Telefon stellte mir verschiedene technische Fragen und meine Antworten waren alle „Nein“. Die andere Seite war sehr nett und sagte, das sei egal. Schließlich war am anderen Ende des Telefons eine Gesprächspartnerin, die mit mir auf Japanisch sprach und mich fragte, was ich getan hatte. Sie war mit meiner Antwort vor allem deshalb zufrieden, weil sie mein Japanisch als sehr gut empfand. Infolgedessen wurde ich Brückeningenieur bei Renren.com. Ich erinnere mich, dass ich in dem Artikel, den ich zuvor in meinem persönlichen Profil geschrieben habe, gesagt habe, dass ich von Internetnutzern für mein Sprachtalent kritisiert wurde. Aber als ich bei Neusoft war, sagten alle, ich hätte Sprachtalent, und ich war es gewohnt, so zu denken . Ich habe es einfach als selbstverständlich angesehen, und ich habe nicht die Absicht, es zu bewerben. Ich kenne Python auch nicht und weiß nicht einmal, was eine offene Plattform ist. Aber ich habe die Wartung der gesamten offenen Plattform selbst übernommen, weil der Chef der offenen Plattform nach Meituan gegangen ist. Dieser Chef ist übrigens wirklich ein toller Kerl. Er hat ein Unternehmen gegründet, ist nach Renren gegangen, ist nach Meituan gegangen und hat jetzt sein eigenes Unternehmen gegründet. Eines Tages zeigte mir mein Freund ein Foto der Tsinghua Alumni Association und fragte mich: „Ist diese Person ein ehemaliger Kollege von Ihnen?“ Ich sagte: „Ja.“ Er sagte: „Die Person, die neben ihm sitzt, ist unser Chef.“ Nun, es scheint, dass mein männliches Idol noch viel Raum für Verbesserungen hat.

Ich beiße in den sauren Apfel und pflege diese offene Plattform. Dann wird das Bubble Fish-Spiel mit einer japanischen Plattform verbunden. Dieses Spiel ist in Python geschrieben. Zu dieser Zeit war dieses Spiel sehr beliebt und die Spielefirma war sehr beschäftigt und hatte keine Zeit, es anzuschließen, also bezahlten sie uns für unsere Hilfe. Wir können nur den Code nehmen und ihn selbst verbinden. Zu dieser Zeit beschäftigte sich Renren gerne mit internem Unternehmertum. Wir waren eine Geschäftsabteilung im Ausland und verdienten kein Geld. Ich habe die Verbindung hergestellt und die Spielpartei hat uns eine Verbindungsgebühr von 100.000 gezahlt, und der Rest war der Spielanteil. Ich weiß nicht, wie hoch die Einnahmen waren. Aber das war damals das einzige profitable Projekt für uns. Python ist wirklich einfach zu erlernen. Tagsüber pflege ich die Website, und nachts mache ich den Zugriff, lerne Python und greife auf Dokumente zu und erledige den Zahlungszugriffsteil in einer Woche. Die Testumgebung ist kostenpflichtig. Beim Betrieb der formalen Umgebung, die von der Betriebs- und Wartungsabteilung MM erstellt wurde, gab es jedoch ein Problem. Abends gingen alle nach Hause und ich arbeitete dort alleine an der Online-Umgebung. Später stellte ich schließlich fest, dass die Version eines Teils des installierten Tools falsch war, ich kann mich aber nicht an die Details erinnern. Das geschah vor 6 Jahren. Also habe ich Python gemacht, aber ich kenne Python nicht.

Es gibt eine hohe Mauer zwischen Java und C++, die von dynamischer Speicherzuweisung und Garbage-Collection-Technologie umgeben ist. Menschen außerhalb der Mauer wollen hinein, aber Menschen innerhalb der Mauer wollen raus. In Java kann man nicht so locker vorgehen, das heißt, die Speicherzuteilungsparameter optimieren. Apropos JVM-Parameteroptimierung: Die am häufigsten verwendete Sache, die jeder kennt und nicht ernst nimmt, ist das Festlegen des anfänglichen Maximums und Minimums Der Wert des Heaps wird auf den gleichen Wert eingestellt, um eine automatische Erweiterung des Heaps zu vermeiden. Dabei wird die Größe der neuen Generation angepasst und der vollständige GC wird durch Durchsatzreduzierung und Verzögerung verursacht. Es wird gesagt, dass fast alle GC-Operationen der JVM, einschließlich kleinerer GC, die Welt stoppen müssen

Abschließend möchte ich jedem eine ausländische Website empfehlen. Häufig werden praktische Werkzeuge und Tuning-Techniken vorgestellt, wobei der Schwerpunkt auf der Analyse liegt. Zu den repräsentativen Werken gehört He

Das obige ist der detaillierte Inhalt vonDer Weg des Java-Architekten – aktuelle Grenztechnologie und verschiedene Programmiersprachen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn