Als Webentwickler konzentriere ich mich am meisten auf Leistung und Architektur. Ich habe dieses Mal an der SD2.0-Konferenz teilgenommen und konnte mich in diesen beiden Aspekten nicht ausgiebig unterhalten Dieser von Freunden geteilte Artikel beschreibt die Erfahrung der Teilnahme an dieser Konferenz und der Kommunikation mit anderen.
Einige Gedanken zum architektonischen Design:
1. Niemals überdesign: Niemals überdesign
Dies ist ein Thema, das oft erwähnt wird, aber solange Sie darüber nachdenken, wie viele Funktionen in Ihrer Architektur überhaupt nicht genutzt werden oder endgültig aufgegeben werden, können Sie verstehen, wie wichtig es ist, wenn Sie sich zum ersten Mal mit dem Architekturdesign befassen Wir neigen dazu, groß angelegte Designs zu entwerfen. Wir hoffen, eine inkrementelle Architektur zu entwerfen, die sich an alle Anforderungen anpassen lässt. Das ist für uns ein sehr dynamischer Prozess Änderungen kommen nächste Woche, und wir müssen so schnell wie möglich auf Änderungen reagieren.
eBay-Ingenieure haben erklärt, dass ihr architektonisches Design nie in der Lage war, dem Wachstum des Systems gerecht zu werden, weshalb ihr System ständig umgeworfen und erneuert wird. Bitte beachten Sie, dass es kein Problem mit den Fähigkeiten der eBay-Architekten gibt. Die Architektur, die sie entwerfen, baut immer auf den Engpässen der alten Version auf, in der Hoffnung, dass die neue Architektur Durchbrüche bringt In kurzer Zeit waren sie von neuen Anforderungen überwältigt und mussten eine neue Architektur verwenden
Die Webentwicklung ist ein sehr agiler Prozess. Die Anforderungen der Benutzer ändern sich ständig. Im Vergleich zur Softwareentwicklung ist es unrealistisch, alle zukünftigen Designs zu planen.
2. Lebenszyklus der Webarchitektur: Lebenszyklus der Webarchitektur
Da wir übermäßiges Design eliminieren und ein gewisses Maß an Weitsicht gewährleisten müssen, wie können wir hoffentlich die Balance finden, die der folgende Webarchitektur-Lebenszyklus bietet?
Die entworfene Architektur muss in der Lage sein, das 1- bis 10-fache Wachstum durch einfache Erhöhung der Hardwarekapazität zu bewältigen. Beginnen Sie während der 5- bis 10-fachen Wachstumsphase mit dem Entwurf der nächsten Version der Architektur, damit sie den nächsten 10 Mal standhalten kann. doppeltes Wachstum
Der Grund, warum Google dominieren kann, liegt nicht ausschließlich daran, wie fortschrittlich die Suchtechnologie und die Sortiertechnologie sind. Tatsächlich sind die verwendeten Technologien mittlerweile ähnlich. Google kann dies jedoch erreichen, indem es Zehntausende von Servern hinzufügt Die Fähigkeit einer ausreichenden Systemkapazität ist in der Tat schwer zu reproduzieren
3. Cache: Cache
Der Cache ist immer die oberste Priorität im Computerdesign. Von der CPU bis zur E/A ist das Design der Webarchitektur wichtig, und der Cache-Entwurf ist von entscheidender Bedeutung jbosscache Der Gründer von Taobao sagte: Tatsächlich ist das Design des Web-Caches und des Caches auf Unternehmensebene sehr unterschiedlich, während der Web-Cache einfach und schnell ist. .
Was ist das Problem, das durch das Caching verursacht wird? Da die Daten über mehrere Prozesse verteilt sind, wird die Komplexität durch das Hinzufügen von Clustern weiter zunehmen wird verwendet? Strategien müssen oft an das Geschäft gebunden sein
Laoqian hat einen von Sohu entworfenen Linked-List-Cache entwickelt, der nicht nur die Anforderungen des flexiblen Einfügens erfüllt, sondern auch ein schnelles Lesen ermöglicht. Einige andere große Communities verwenden häufig ähnliche Strukturen, um Post-Listen zu optimieren. Werkzeug
Link: Qian Hongwus Video über Architekturdesign http://211.100.26.82/CSDN_Live/140/qhw.flv
Die übliche Strategie von Cache besteht darin, Daten im Arbeitsspeicher statt auf der zeitaufwändigeren Festplatte zu behalten. Aus dieser Perspektive ist auch die von MySQL bereitgestellte Heap-Engine (Speichermethode) eine erwägenswerte Methode. Diese Speichermethode kann Daten im Speicher speichern und die leistungsstarken Abfragefunktionen von SQL beibehalten.
Wir haben hier nur über Lese-Caching gesprochen. Tatsächlich gibt es auch einen Schreib-Cache, der in inhaltsorientierten Communities selten verwendet wird, da das Hauptproblem, das solche Communities lösen müssen, das Leseproblem ist, wenn jedoch die Verarbeitungskapazität geringer ist als die Anforderungskapazität Wenn oder wenn eine einzelne Anforderung zwischengespeichert wird, um einen Block zu bilden und dann in Stapeln verarbeitet wird, kann ein solcher Cache in einem hochgradig interaktiven Community-Design leicht gefunden werden.
Viertens muss das Kernmodul selbst entwickelt werden: DIY Ihr Kernmodul
Qian Hongwu und Yunfeng haben auch erwähnt, dass wir häufig dazu neigen, einige Open-Source-Module zu verwenden. Wenn dies der Fall ist, müssen wir vorsichtig sein Wenn die Anzahl der Besuche ein bestimmtes Niveau erreicht, treten bei diesen Modulen häufig Probleme der einen oder anderen Art auf. Natürlich können wir das Problem auf die Unkenntnis von Open-Source-Modulen zurückführen, aber egal, wenn es ein Problem mit dem Kern gibt Es ist sehr beängstigend, den Code nicht vollständig zu verstehen.
5. Angemessene Datenspeicherung: Angemessene Datenspeicherung
Müssen wir nicht unbedingt eine Datenbank verwenden? Lei Ming sagt uns, dass für die Suche nicht unbedingt eine Datenbank erforderlich ist ersetzen?
Zunächst müssen wir zugeben, dass die Datenbank auch mit Dateien arbeitet. Wir benötigen eine Datenbank, hauptsächlich um die folgenden Funktionen zu nutzen: Eine ist die Datenspeicherung und die andere ist der Datenabruf. In relationalen Datenbanken legen wir tatsächlich großen Wert auf die komplexen Suchfunktionen der Datenbank. Schauen Sie sich einfach eine TSQL an, um Statistiken zu erhalten. Kein sorgfältiges Lesen nötig, werfen Sie einfach einen Blick darauf)
Wählen Sie c.Class_name,d.Class_name_2,a.Creativity_Title,b.User_name,(select count(Id) from review where Reviewid=a.Id) as countNum from Creativity as a,User_info as b,class as c,class2 as d wobei a.user_id=b.id und a.Creativity_Class=c.Id und a.Creativity_Class_2=d.Id sind
Wählen Sie a.Id,max(c.Class_name),(max(d.Class_name_2),max(a.Creativity_Title),max(b.User_name),count(e.Id) als countNum aus Creativity als a,User_info als b ,Klasse als c,Klasse2 als d,Bewertung als e, wobei a.user_id=b.id und a.Creativity_Class=c.Id und a.Creativity_Class_2=d.Id und a.Id=e.Reviewid gruppieren nach a.Id … ……………………………….