Heim  >  Artikel  >  Backend-Entwicklung  >  Website-Architektur und Entwicklung der Spring MVC-Codepraxis

Website-Architektur und Entwicklung der Spring MVC-Codepraxis

零到壹度
零到壹度Original
2018-04-02 10:03:411699Durchsuche

Dieser Artikel teilt Ihnen die Website-Architektur und die Entwicklung der Spring MVC-Code-Praxis mit. Der Inhalt ist ziemlich gut. Ich hoffe, er kann Freunden in Not helfen.

Website-Architektur und seine Entwicklung

Infrastruktur

Methode zur Zerlegung der Netzwerkübertragung:

  • Standard-OSI-Referenzmodell

  • TCP/IP-Referenzmodell

Website-Architektur und Entwicklung der Spring MVC-Codepraxis

Lösungen für große Datenmengen

  • Caching und Seitenstatisierung

  • Cache

    • Direkt im Speicher über das Programm speichern

    • Caching-Frameworks verwenden (Encache, Redis, Memcache)

  • Statische Seite

    • Generiert mit Template-Technologie (Velocity, FreeMaker usw.)

  • Datenbankoptimierung

  • Tabellenstrukturoptimierung

  • SQL-Anweisungsoptimierung

  • Partition

  • Tabelle

  • Indexoptimierung

  • Verwenden Sie gespeicherte Prozeduren anstelle von direkten Manipulationsverfahren

  • Aktive Daten trennen

  • Batch-Lesen und verzögerte Änderung

  • Trennung von Lesen und Schreiben

    Website-Architektur und Entwicklung der Spring MVC-Codepraxis

  • Verteilte Datenbank

    Website-Architektur und Entwicklung der Spring MVC-Codepraxis

  • NoSQL und Hadoop


Lösung mit hoher Parallelität

  • Trennung von Anwendungen und statischen Ressourcen: statische Dateien ( Bilder , Videos, JS, CSS usw.) werden auf einem dedizierten Server

  • Seiten-Caching (Nginx-Server, Squid-Server)

  • Clustering und Verteilung

  • Reverse-Proxy

  • CDN

  • Grundlegende Optimierung: Netzwerkübertragungsprotokoll

Gemeinsame Protokolle und Standards

TCP/IP-Protokoll

IP: Suchadresse, entsprechend dem internationalen Internet

TCP: Spezifikation Übertragungsregeln, entsprechend der Übertragungsschicht

TCP kommuniziert vor der Übertragung dreimal, was als „Drei-Wege-Handshake“ bezeichnet wird. Nach der Übertragung der Daten kommuniziert es viermal, wenn die Verbindung getrennt wird, was als „vier Wellen“ bezeichnet wird.

TCP hat zwei Sequenznummern und drei Flag-Bits, was bedeutet:

  • seq: Gibt die Sequenznummer der übertragenen Daten an. Jedes Byte während der TCP-Übertragung hat eine Sequenznummer. Wenn der Empfang nicht abgeschlossen ist, wird die erste Sequenznummer an die andere Partei gesendet , muss es erneut übertragen werden. Auf diese Weise kann die Datenintegrität gewährleistet werden.

  • ack: Gibt die Bestätigungsnummer an. Das empfangende Ende sendet damit die erfolgreich empfangenen Dateninformationen an das sendende Ende zurück. Sein Wert ist die Startsequenznummer des nächsten Datenpakets, das es zu empfangen hofft.

  • ACK: Bestätigungsbit, Bestätigung funktioniert nur, wenn ACK = 1. Während der normalen Kommunikation ist die ACK 1. Wenn die Anfrage zum ersten Mal initiiert wird, ist die ACK 0, da keine Daten vorhanden sind, die bestätigt werden müssen.

  • SYN: Synchronisationsbit, das zum Synchronisieren der Sequenznummer beim Verbindungsaufbau verwendet wird. Wenn die Verbindung zum ersten Mal hergestellt wird, gibt es keine Möglichkeit, eine Bestätigung festzulegen. Die Rolle von SYN besteht darin, dieses Problem zu lösen SYN = 1-Bericht Beim Schreiben wird die Bestätigung direkt auf den Wert der empfangenen Sequenz + 1 gesetzt. Beachten Sie, dass der Wert hier nicht nach der Überprüfung festgelegt wird, sondern direkt gemäß SYN festgelegt wird, sodass der normale Mechanismus ausgeführt werden kann. daher heißt SYN Synchronisationsbit. SYN ist in den ersten beiden Handshakes 1, da die Bestätigung beider Kommunikationsparteien einen Anfangswert festlegen muss.

  • FIN: Beendigungsbit, das zum Lösen der Verbindung nach Abschluss der Datenübertragung verwendet wird.

Website-Architektur und Entwicklung der Spring MVC-Codepraxis


DNS-Einstellungen

DNS-Auflösung

Beziehen Sie sich auf die Domänennameneinstellungen. Im Folgenden sind meine Einstellungen für den Tencent Cloud-Domänennamen aufgeführt

Website-Architektur und Entwicklung der Spring MVC-Codepraxis

Datensatztyp:

Ein Eintrag: Verweisen Sie den Domänennamen auf eine IPv4-Adresse (z. B.: 8.8.8.8)

CNAME: Verweisen Sie den Domänennamen auf einen anderen Domänennamen ( z.B. www.54tianzhisheng .cn)

MX: Verweisen Sie den Domainnamen auf die Mailserveradresse

TXT: Kann beliebig ausgefüllt werden, die Länge ist auf 255 begrenzt, normalerweise SPF-Einträge (Anti-Spam)

NS: Domain-Name-Server-Eintrag, geben Sie den Subdomain-Namen an andere DNS-Server zur Auflösung an

AAAA: Verweisen Sie den Domänennamen auf eine iPv6-Adresse (Beispiel: ff06:0:0:0:0:0:0:c3)

SRV: Eintragen der Server, der einen bestimmten Dienst bereitstellt (z. B. xmpp-server.tcp)

Explizite URL: Domainname 301 an eine andere Adresse umleiten

Implizite URL: Ähnlich der expliziten URL, verbirgt jedoch die tatsächliche Zieladresse

Hostdatensatz:

Um www.54tianzhisheng.cn aufzulösen, füllen Sie bitte www aus . Der Host-Eintrag ist das Präfix des Domänennamens:

www: *Der aufgelöste Domänenname ist www.54tianzhisheng.cn.

*@: Löst den Hauptdomänennamen 54tianzhisheng.cn direkt auf.

*: Pananalytisch, passend zu allen anderen Domainnamen *.54tianzhisheng.cn.

mail: löst den Domänennamen in mail.54tianzhisheng.cn auf, der normalerweise zum Auflösen des Postfachservers verwendet wird.

Domänenname der zweiten Ebene: Zum Beispiel: abc.54tianzhisheng.cn, füllen Sie abc aus.

Mobile Website: Zum Beispiel: m.54tianzhisheng.cn, füllen Sie m aus.


Verwendung von Socket in Java

Verwendung von gewöhnlichem Socket

Socket ist in zwei Kategorien unterteilt: ServerSocket und Socket.

ServerSocket wird auf der Serverseite verwendet. Es kann über die Accept-Methode auf Anfragen warten und den Socket nach dem Abhören der Anfrage zurückgeben.

Socket-Benutzer schließen die Datenübertragung speziell ab Verwendet Socket direkt zum Senden von Anforderungen und zum Übertragen von Daten.

Ich habe gerade eine Demo zum einseitigen Versenden von Nachrichten geschrieben:

Kunde:

  1. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>

  2. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">OutputStream</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>

  3. <span style="color:rgb(199,146,234);line-height:20px; Schriftgröße:13px !important;white-space: !important;">import<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span> java.net

    .
  4. Socket
  5. ;

  6. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;">/**</span>

  7. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;">/**<p style="min-height:1em;"></p></span><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * Created by 10412 on 2017/5/2.</span>
  8. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * Erstellt von 10412 im Jahr 2017 /5/2.<p style="min-height:1em;"></p></span><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * TCP客户端:</span>
  9. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px ! important;white-space: !important;"> * TCP客户端:<p style="min-height:1em;"></p></span><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。</span><span style="color:rgb(79,103,117);line -height:20px;font-size:13px !important;white-space: !important;">就已经可以对指定ip和端口进行连接(三次握手)。</span></codestil> </li> <li><p style="min-height:1em;"><span style="color:rgb(74,74,74);display:block;line-height:22px;font-size:14px !important;"><span style="line-height:22px;display:block;"><code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②:如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。</span>

  10. <span style="color:rgb(79,103,117);line-height:20px; font-size:13px !important;white-space: !important;"> ③:关闭资源。<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ③:关闭资源。</span>

  11. */
    //单方面的输入!
    public class TcpClient
    {
        public static void main(String[] args) {
            try {
                Socket s = new Socket("127.0.0.1", 9999);
                OutputStream o = s.getOutputStream();
                o.write("tcp sssss".getBytes());
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

服务器端:

  1. import<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span> java.io

    .
  2. IOException
  3. ;

    <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">InputStream</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>

  4. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import<p style="min-height:1em;"><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java<span style="color:rgb(74,74,74);display:block;line-height:22px;font-size:14px !important;"><span style="color:rgb(204,204,204);line- height:20px;font-size:13px !important;white-space: !important;">.<span style="line-height:22px;display:block;"><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important ;white-space: !important;">io<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>. InputStream;

    import<span style="color:rgb(238,255,255); line-height:20px;font-size:13px !important;white-space: !important;"> java<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.<span style="color :rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket<span style="color:rgb(204,204,204);line-height:20px ;font-size:13px !important;white-space: !important;">;</span></span></span></span></span></span>
  5. <span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>

  6. /**
     * Created by 10412 on 2017/5/2.
     */
    public class TcpServer
    {
        public static void main(String[] args) {
            try {
                ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务
                Socket s = ss.accept();//获取客户端对象
                String ip = s.getInetAddress().getHostAddress();
                int port = s.getPort();
                System.out.println(ip + " : " + port + " connected");
                // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。
                InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流
                byte[] bytes = new byte[1024];
                int len = ins.read(bytes);
                String text = new String(bytes, 0, len);
                System.out.println(text);
                //关闭资源
                s.close();
                ss.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

Das obige ist der detaillierte Inhalt vonWebsite-Architektur und Entwicklung der Spring MVC-Codepraxis. 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