Ausführlich guter Artikel-Vortrag über die Architektur und Leistungsoptimierung großer Websites ab 12306.cn.

12306.cn-website ist down,Von Leuten im ganzen Land gescholten。Ich habe diese zwei Tage darüber nachgedacht,Ich möchte diese Angelegenheit nutzen, um mit Ihnen die Leistungsfähigkeit der Website grob zu besprechen.。Wegen Eile,Und basiert ausschließlich auf meiner begrenzten Erfahrung und meinem Verständnis,und so,Bei Fragen bitte gemeinsam diskutieren und korrigieren。(Dies ist ein weiterer langer Artikel,Besprechen Sie nur Leistungsprobleme,Diskutieren Sie nicht über diese Benutzeroberfläche,Benutzererfahrung,Oder ist es eine funktionale Sache, die Zahlung und Ticketkauf und -bestellung trennt?) Geschäft Jede Technologie ist untrennbar mit den geschäftlichen Anforderungen verbunden,und so,Zur Veranschaulichung von Leistungsproblemen,Zuerst möchte ich zuerst über das Geschäftsproblem sprechen。 Einer,Jemand könnte dieses Ding mit QQ oder Online-Spielen vergleichen。Aber ich denke die beiden sind unterschiedlich,Online-Spiele und QQ online oder beim Einloggen auf weitere eigene Daten des Nutzers zugreifen,Das Ticketbuchungssystem greift auf die Ticketvolumendaten des Centers zu,Es ist nicht das gleiche。Glauben Sie nicht, dass Online-Spiele oder QQ funktionieren können, Sie denken nur, dass es dasselbe ist。Im Vergleich zu E-Commerce-Systemen ist die Backend-Last von Online-Spielen und QQ immer noch einfach。 Sekunde,Manche Leute sagen, dass die Buchung eines Zuges während des Frühlingsfestes wie eine Spitzenaktivität auf der Website ist。Wirklich sehr ähnlich,Aber wenn dein Denken nicht an der Oberfläche ist,Sie werden feststellen, dass dies auch ein wenig anders ist。Zugtickets,Einerseits wird es von einer Vielzahl von Abfrageoperationen begleitet,Darüber hinaus gibt es bei BT viele konsistente Operationen auf der Datenbank, wenn eine Bestellung aufgegeben wird.,Einerseits die Konsistenz jedes Segmenttickets vom Startpunkt bis zum Endpunkt,auf der anderen Seite,Käuferroute、Zugnummer、Es gibt viele Zeitoptionen,Wird die Art und Weise der Auftragserteilung ständig ändern。Und Spike,Töte es einfach direkt,Es gibt nicht so viele Abfragen und Konsistenzprobleme。Außerdem,Über Spike,Es kann eingestellt werden, dass nur die Anfragen der ersten N Benutzer akzeptiert werden (keine Daten im Backend betreiben, Einfach den Bestellvorgang des Benutzers protokollieren),Diese Art von Geschäft,Sie müssen nur die Anzahl der Spikes in den Speichercache setzen,Sie können die Daten auch verteilen,100Fan-Shop,10Jeder Server stellt 10,Keine Notwendigkeit, zu diesem Zeitpunkt eine Datenbank zu betreiben。Sie können genug bestellen,Spitze stoppen,Dann stapelweise in die Datenbank schreiben。Und es gibt nicht viele Produkte im Spike。Das Zugticket ist nicht so einfach wie ein Spike,Zeit des Frühlingsfestes,Fast alle Tickets sind heiße Tickets,Und fast alle Menschen des ganzen Landes sind hier,Und es gibt auch ein Transfergeschäft,Multi-Line-Inventar muss transaktionale Vorgänge sein,Denk darüber nach,Wie schwer ist das。(Taobaos Double Eleven hat 3 Millionen Nutzer,Und Zugtickets haben sofort Dutzende von Millionen oder sogar Hunderte von Millionen) (Update:201411. Januar:Nach der Ankunft in Taobao,Verstehe das System von Taobao,Taobaos Spitzenaktivität,Im Wesentlichen verwendet es den Verifizierungscode, um Benutzer direkt auf dem CDN herauszufiltern,zum Beispiel:1Dutzende Millionen Nutzer werden herausgefiltert, es bleiben nur noch 20.000 Nutzer,Auf diese Weise kann die Datenbank standhalten) Dritte,Jemand vergleicht dieses System mit dem olympischen Ticketsystem。Ich denke es ist immer noch anders。Obwohl das olympische Ticketsystem gleich nach seiner Einführung abgeschafft wurde。Aber die Olympischen Spiele verwenden eine Lotterieziehung,Mit anderen Worten, es gibt keinen Wer zuerst kommt, mahlt zuerst,und,Ist ein nachträglicher Gedanke,Muss nur vorher Informationen erhalten,Keine vorherige Sicherstellung der Datenkonsistenz,Kein Schloss,Einfach horizontal skalieren。 Vierte,Das Buchungssystem sollte dem E-Commerce-Bestellsystem sehr ähnlich sein,Alle müssen Inventur durchführen:1) Inventar besetzen,2) Zahlung (optional),3) Der Vorgang des Abzugs von Inventar。Dies muss auf Konsistenz geprüft werden,Das heißt, die Daten müssen während der Parallelität gesperrt werden。B2C-E-Commerce wird dies grundsätzlich asynchron tun,Mit anderen Worten,Ihre Bestellung wird nicht sofort bearbeitet,Aber verzögerte Bearbeitung,Nur erfolgreich bearbeitet,Das System sendet Ihnen eine Bestätigungs-E-Mail mit der Bestätigung, dass die Bestellung erfolgreich war。Ich glaube, viele Freunde haben erfolglose E-Mails erhalten。Dies bedeutet, dass,Datenkonsistenz ist ein Engpass bei Parallelität。 Nr. 5,Das Geschäft mit Bahntickets ist anormal,Es verwendet plötzliche Ticketfreigabe,Und manche Stimmen reichen bei weitem nicht für alle,und so,Jeder wird die Praxis haben, Tickets für ein Geschäft mit chinesischen Merkmalen zu ergattern。Also wenn das Ticket freigegeben ist,Millionen oder sogar Dutzende von Millionen werden getötet,Anfragen,Eine Bestellung aufgeben。Innerhalb von zehn Minuten,Eine Website kann zig Millionen Besuche erhalten,Das ist eine schreckliche Sache。Es wird gesagt, dass der Spitzenbesuch von 12306 1 Milliarde PV . beträgt,Konzentrieren Sie sich auf 8 bis 10 Uhr,Zig Millionen PV pro Sekunde in der Spitze。 Sag noch ein paar Worte: Inventar ist ein B2C-Albtraum,Bestandsverwaltung ist ziemlich kompliziert。Misstrauen,Sie können alle traditionellen und Elektrohandelsunternehmen fragen,Sehen Sie, wie schwierig es für sie ist, das Inventar zu verwalten。Andernfalls,Es wird nicht so viele Leute geben, die nach Vancls Inventar fragen。(Sie können sich auch "Berufsbiografie" ansehen,Du weißt, warum Tim das Amt des CEO von Apple übernommen hat,Der Hauptgrund ist, dass er das Problem des Inventarzyklus von Apple gelöst hat) Für eine Website,Die hohe Belastung beim Surfen im Web ist einfach zu handhaben,Die Last der Abfrage hat einen gewissen Schwierigkeitsgrad zu bewältigen,Aber es kann immer noch durch Zwischenspeichern der Abfrageergebnisse erfolgen,Das Schwierigste ist die Ladung der Bestellung。Weil ich auf das Inventar zugreifen muss,Für eine Bestellung,Grundsätzlich erfolgt es asynchron。Doppel 11 letztes Jahr,Taobaos Bestellungen pro Stunde liegen bei etwa 600.000,Jingdong kann nur 400.000 an einem Tag unterstützen (es ist schlimmer als 12306),Amazon konnte vor 5 Jahren 700.000 Bestellungen in einer Stunde unterstützen。sichtbar,Die Auftragserteilung ist nicht so hoch wie bei uns。 Taobao ist viel einfacher als eine B2C-Website,Weil es kein Lager gibt,und so,Es gibt keine Operation wie B2C, die N Lager hat, um denselben Produktbestand zu aktualisieren und abzufragen。Bei Auftragserteilung,Die B2C-Website wird ein Lager finden,Wieder nah am Nutzer,Wieder Inventar,Dies erfordert viele Berechnungen。Stell dir vor,Du hast ein Buch in Peking gekauft,Das Lager in Peking ist vergriffen,Muss aus dem umliegenden Lager umgeladen werden,Dann schau, ob das Lager in Shenyang oder Xi'an auf Lager ist,wenn nicht,Ich muss mir das Lager in Jiangsu ansehen,und viele mehr。Taobao hat nicht so viele Dinge,Jeder Händler hat sein eigenes Inventar,Inventar ist eine Zahl,Und das Inventar wird dem Händler zugeteilt,Es ist förderlich für die Leistungserweiterung。 Datenkonsistenz ist der wahre Leistungsengpass。Einige Leute sagen, dass nginx 100.000 statische Anfragen pro Sekunde verarbeiten kann,Ich zweifle nicht。Aber das ist nur eine statische Anfrage,Theoretischer Wert,Solange die Bandbreite、E/A ist stark genug,Server-Rechenleistung reicht aus,Und die Anzahl der unterstützten gleichzeitigen Verbindungen kann dem Aufbau von 100.000 TCP-Links standhalten,Das ist kein Problem。Aber angesichts der Datenkonsistenz,Diese 100.000 sind völlig zu einem unerreichbaren theoretischen Wert geworden。 Ich habe so viel gesagt,Ich möchte nur allen vom Geschäft erzählen,Wir müssen die Anomalien des Ticketbuchungsgeschäfts der Spring Festival Railway aus der Branche wirklich verstehen.。 Front-End-Technologie zur Leistungsoptimierung zur Lösung von Leistungsproblemen,Es gibt viele gängige Methoden,Ich werde unten auflisten,Ich glaube, dass die 12306-Website, die die folgenden Technologien verwendet, ihre Leistung zu einem qualitativen Sprung machen wird。 einer、Front-End-Load-Balancing Der DNS-Load-Balancer (in der Regel auf dem Router entsprechend der Lastumleitung der Route) kann den Zugriff des Benutzers gleichmäßig auf mehrere Webserver verteilen。Dies kann die Anforderungslast des Webservers reduzieren。Weil http-Anfragen kurze Jobs sind,und so,Diese Funktion kann durch einen sehr einfachen Load Balancer erreicht werden。Es ist am besten, ein CDN-Netzwerk zu haben, damit Benutzer eine Verbindung zum nächstgelegenen Server herstellen können (CDN wird normalerweise von verteiltem Speicher begleitet).。(Eine detailliertere Beschreibung des Load-Balancing finden Sie unter "Back-End-Load-Balancing") Zwei、Reduzieren Sie die Anzahl der Frontend-Links…

Lösen Sie zu viele MySQL-Schlafverbindungen

  Show Processlist ausführen;Show Processlist ausführen,Show Processlist ausführen, 这些都是客户端和 数据库通信后没有释放的。Show Processlist ausführen,Show Processlist ausführen, Show Processlist ausführen, Show Processlist ausführen。 问题产生的根源有以下3种情况 1.使用了太多持久连接 2.程序中没有及时关闭mysql连接 3.数据库查询不够优化过度耗时 最根本的办法是从以上3种情况排查 1.程序中,Datenbankabfrage ist nicht optimiert genug,即使用mysql_connect而不是pconnect 2.程序执行完毕应该显式调用mysql_close 3.只能逐步分析系统的SQL查询,Datenbankabfrage ist nicht optimiert genug,Datenbankabfrage ist nicht optimiert genug,然后优化 这是从研发角度排查,Datenbankabfrage ist nicht optimiert genug, Datenbankabfrage ist nicht optimiert genug, Dann müssen wir uns auf die Timeout-Funktion von mysql selbst verlassen, um das Problem zu lösen,命令行键入 mysql> Dann müssen wir uns auf die Timeout-Funktion von mysql selbst verlassen, um das Problem zu lösen “%Dann müssen wir uns auf die Timeout-Funktion von mysql selbst verlassen, um das Problem zu lösen”;…

Führen Sie Oracle 11gR2 RAC + DG4 erneut aus

Teil 3 hat die Protokollsynchronisierung von der RAC-Hauptbibliothek zur dg-Standby-Bibliothek abgeschlossen. In diesem Teil werden die Protokolle konfiguriert, die von der dg-Standby-Datenbankanwendung synchronisiert werden. Schließen Sie dann den RAC- und DG-Rollentausch ab. Überprüfen Sie, ob die Protokoll-SQL auf die Standby-Datenbank angewendet wird> Sequenz wählen# ,Name ,angewendet von v$archived_log; SEQUENZ#NAME ANGEWENDET ———- ———————————————————————- ——— 24 +FLASH/phydb/archivelog/2016_06_23/thread_1_seq_24.264.915256125 NEIN 22 +FLASH/phydb/archivelog/2016_06_23/thread_1_seq_22.262.915256125 NEIN 23…

Führen Sie Oracle 11gR2 RAC + DG3 erneut aus

Der letzte Teil konfigurierte die dg standby database asm disk group,Vorbereitung der RAC-Hauptbibliothek, Dieser Teil bereitet sich weiterhin auf die dg-Standby-Datenbank vor,Initialisierungsdatei, Steuerdatei,Wiederherstellung von Datenbankdateien, Standby-Logfile erstellt,Protokollsynchronisierung von der RAC-Master-Datenbank zur dg-Standby-Datenbank usw. Kopieren Sie die Datenbanksicherungsdatei unter node1 node/rman_backup, Initialisierungsdatei,Steuerdatei, Alle archivierten Protokolle werden unter /rman_backup von dg kopiert. Dies ist die Sicherungsdatei unter node1 /rman_backup/. Diese Dateien werden per FTP hochgeladen,Oder andere Möglichkeiten zum Übertragen in das /rman_backup-Verzeichnis der dg-Sicherungsbibliothek,Die Übertragung wird wie folgt abgeschlossen: Erstellen Sie eine Kennwortdatei für die physische Standby-Datenbank dg edit .bash_profile wie folgt: export PATH export TMP=/tmp export TMPDIR=$TMP export ORACLE_HOSTNAME=dg.localdomain export ORACLE_SID=phydb export ORACLE_BASE=/u01/app/oracle…

Führen Sie Oracle 11gR2 RAC + DG2 erneut aus

Dieser Teil beginnt mit der Erstellung der asm-Datenträgergruppe der dg-Standby-Datenbank,Führen Sie dann die Vorbereitung der RAC-Hauptbibliothek durch。 dg Standby-Datenbank auf Grid-Benutzer wechseln,Führen Sie asmca aus, um die Konfiguration zu starten Create DATA disk group,Dies ist zum Speichern von Daten in der Zukunft. Warten Sie einen Moment, bis die Erstellung erfolgreich war. Verwenden Sie dieselbe Methode, um die FLASH-Festplattengruppe zu erstellen,Vervollständigen Sie wie folgt:   dg zum Oracle-Benutzer wechseln,Überprüfen Sie die gerade erstellte Festplattengruppe su -grid sqlplus / als sysdba wählen Sie den Namen aus v$asm_diskgroup; NAME ———————————————————————————— DATA GRIDDG FLASH Es ist zu sehen, dass die ASM-Festplattengruppe erfolgreich erstellt wurde. Mounten Sie die soeben erstellte Festplatte /dev/sde, da sie in eine ext3-Partition formatiert wurde,Daher kann es direkt in das Verzeichnis /rman_backup gemountet werden…

Führen Sie Oracle 11gR2 RAC + DG1 erneut aus

Unter https://www.roamway.com/1273.html,RAC-Datenbank wurde konfiguriert, Diesmal ist der DataGuard-Dienst auf Basis von RAC Dual Machine konfiguriert, Kann schnelles Umschalten zwischen der Hauptbibliothek und der Standby-Bibliothek realisieren, Bereitstellung von Disaster Recovery- und Backup-Funktionen. Dieser Teil,Wir müssen die Dataguard-Systemplattform bereitstellen, ASM-Dienst konfigurieren,Installieren Sie dann das Single-Node-Grid, Installieren Sie abschließend die Oracle-Software. Die Einzelheiten sind wie folgt: 1. Installieren Sie das Betriebssystem, OEL5.5 x64 wird diesmal noch verwendet , Lokale Festplatte 20 GB, Hostname dg.localdomain , IP Adresse 192.168.137.159 ,Iptables und Selinux nicht aktivieren. Wählen Sie beim Anpassen das folgende Installationspaket: Desktop-Umgebungen: GNOME-Desktop…

Nachdruck des Linux-Alias-Netzwerkkartensatzes

  什么是ip别名? 用windows的话说就是为一个网卡配置多个ipwhen 什么场合增加ip别名能派上用场? 布网需要多ip访问测试特定软件对多ip的需要…und so weiter. how 下面通过几个例子简单介绍一下如何使用ifconfig命令给网卡配置ip别名至于IP/掩码/DNS/网关/路由的配置请见路由器/Linux主机/win下主机的路由配置汇总篇。 Hinweis:要注意你的配置是立即生效还是永久的。 einer、首先为服务器网卡配置静态ip地址 #ifconfig eth0 192.168.6.99 Netzmaske 255.255.255.0 upeth0

Sehr wichtige Sicherheitsbestimmungen

Web安全原则 1. 认证模块必须采用防暴力破解机制,Z.B:验证码或者多次连续尝试登录失败后锁定帐号或IP。 veranschaulichen:如采用多次连续尝试登录失败后锁定帐号或IP的方式需支持连续登录失败锁定策略的“允许连续失败 的次数”可配置支持在锁定时间超时后自动解锁。 2. 对于每一个需要授权访问的页面或servlet的请求都必须核实用户的会话标识是否合法用户是否被授 3. 权执行这个操作以防止URL越权。 veranschaulichen:防止用户通过直接输入URL进行URL越权请求并执行一些页面或servlet建议通过过滤器实现。 4. 登录过程中往服务器端传递用户名和口令时必须采用HTTPS安全协议(也就是带服务器端证书的SSL)只提供本机接入登录做设备管理使用的场景暂时不要求。 veranschaulichen:如果在客户端和服务器间传递如帐号口令等敏感数据必须使用带服务器端证书的SSL由于SSL对 服务端的CPU资源消耗很大实施时必须考虑服务器的承受能力。 5. 对用户的最终认证处理过程必须放到服务器进行。 6. 用户产生的数据必须在服务端进行校验数据在输出到客户端前必须先进行HTML编码以防止执行恶意 代码跨站脚本攻击对于不可信的数据输出到客户端前必须先进行 HTML 编码。 7. 使用主流Web安全扫描工具扫描Web服务器和Web应用不存在“高”级别的漏洞。 8. 非嵌入式产品的Web应用应使用预编译语句PreparedStatement代替直接的语句执行Statement以防止SQL注入数据库安全 外购数据库开源数据库自研数据库都应进行安全配置保证不出现安全漏洞。 1. 数据库口令禁止使用数据库厂商的缺省口令且口令复杂度需满足“口令安全要求”。…