>백엔드 개발 >PHP 튜토리얼 >웹사이트 아키텍처와 Spring MVC 코드 실습의 진화

웹사이트 아키텍처와 Spring MVC 코드 실습의 진화

零到壹度
零到壹度원래의
2018-04-02 10:03:411755검색

이 기사는 웹사이트 아키텍처와 Spring MVC 코드 실습의 진화를 공유합니다. 내용이 꽤 좋습니다. 도움이 필요한 친구들에게 도움이 되기를 바랍니다

웹사이트 아키텍처와 그 진화 과정

인프라

분해 방법:

  • 표준 OSI 참조 모델

  • TCP/IP 참조 모델

웹사이트 아키텍처와 Spring MVC 코드 실습의 진화

대량 데이터를 위한 솔루션

  • 캐싱 및 페이지 정적화

  • Caching

    • 프로그램을 통해 메모리에 직접 저장

    • 캐시 프레임워크(Encache, Redis, Memcache) 사용

  • 정적 페이지

    • 템플릿 기술(Velocity, FreeMaker 등)을 사용하여 생성됨

  • 데이터베이스 최적화

  • 테이블 구조 최적화

  • SQL 문 최적화

  • Partition

  • 하위 테이블

  • 인덱스 최적화

  • 직접 조작 절차 대신 저장 프로시저를 사용하세요

  • 별도의 활성 데이터

  • 일괄 읽기 및 지연 수정

  • 독서의 분리 그리고

    웹사이트 아키텍처와 Spring MVC 코드 실습의 진화

  • 분산 데이터베이스

    웹사이트 아키텍처와 Spring MVC 코드 실습의 진화

  • NoSQL 및 Hadoop

    을 작성합니다.


고동시성 솔루션

  • 분리 애플리케이션 및 정적 리소스: 정적 파일(이미지, 비디오, JS, CSS 등)은 전용 서버

  • 페이지 캐시(Nginx 서버, Squid 서버)

  • 클러스터링 및 분산

  • 역방향 프록시

  • CDN

  • 기본 최적화: 네트워크 전송 프로토콜

공통 프로토콜 및 표준

TCP/IP 프로토콜

IP: 국제 인터넷에 해당하는 조회 주소

TCP: 전송 계층에 해당하는 표준 전송 규칙

TCP는 전송 전에 3번 통신하는데, 이를 "3방향 핸드셰이크"라고 합니다. 데이터를 전송한 후 연결이 끊어지면 4번 통신합니다. 이를 "4파"라고 합니다.

TCP 두 개의 시퀀스 번호, 세 개의 플래그 의미:

  • seq: 전송된 데이터의 시퀀스 번호를 나타냅니다. TCP 전송 중 각 바이트에는 시퀀스 번호가 있습니다. 데이터 전송 시 수신자는 시퀀스 번호에 따라 수신 완료 여부를 확인합니다. , 재전송이 필요합니다. 이렇게 하면 데이터 무결성이 보장될 수 있습니다.

  • ack: 확인 번호를 나타냅니다. 수신측에서는 이를 사용하여 성공적으로 수신된 데이터 정보를 송신측에 피드백합니다. 그 값은 수신하려는 다음 데이터 패킷의 시작 시퀀스 번호입니다.

  • ACK: 승인 비트, ack는 ACK = 1인 경우에만 작동합니다. 정상적인 통신 중에는 ACK가 1이 됩니다. 처음 요청이 시작되면 확인해야 할 데이터가 없기 때문에 ACK가 0이 됩니다.

  • SYN: 연결을 설정할 때 시퀀스 번호를 동기화하는 데 사용되는 동기화 비트입니다. 처음 연결이 설정되면 수신된 데이터에 대한 기록이 없으므로 ack를 설정할 방법이 없습니다. 이는 일반적인 메커니즘에 따라 작동하지 않습니다. SYN의 역할은 수신 측에서 이 문제를 해결하는 것입니다. SYN = 1 보고 쓰기 시 ack는 수신된 seq + 1의 값으로 직접 설정됩니다. 여기서 값은 검증 후에 설정되는 것이 아니라 SYN에 따라 직접 설정되므로 정상적인 메커니즘이 실행될 수 있습니다. 그래서 SYN을 동기화 비트라고 합니다. SYN은 처음 두 번의 핸드셰이크에서 1이 됩니다. 통신에서 양 당사자의 응답이 초기 값을 설정해야 하기 때문입니다.

  • FIN: 종료 비트, 데이터 전송이 완료된 후 연결을 해제하는 데 사용됩니다. Dns 설정 nDns 분석

  • 참조 도메인 이름 설정은 다음과 같습니다. Tencent 클라우드 도메인 이름

웹사이트 아키텍처와 Spring MVC 코드 실습의 진화


레코드 유형:

A 레코드: 도메인 이름을 IPv4 주소로 지정(예: 8.8.8.8)

CNAME: 도메인 이름을 다른 도메인 이름으로 지정(예: www.54tianzhisheng.cn)

MX : 메일 서버를 가리키는 도메인 이름 주소

TXT: 임의로 입력 가능, 길이 제한은 255, 일반적으로 SPF 레코드(스팸 방지)

NS: 도메인 이름 서버 레코드, 하위 도메인 이름 지정 해결을 위해 다른 DNS 서버로

AAAA: 도메인 이름을 iPv6 주소로 변경합니다(예: ff06:0:0:0:0:0:0:c3)

SRV: 해당 서버를 기록합니다. 특정 서비스 제공(예: xmpp-server.tcp)

명시적 URL : 도메인 이름 301을 다른 주소로 리디렉션

암시적 URL: 명시적 URL과 유사하지만 실제 대상 주소는 숨겨집니다

호스트 기록:

www.54tianzhisheng.cn을 해결하려면 www를 입력하세요. 호스트 레코드는 도메인 이름 접두사입니다. 일반적인 사용법은 다음과 같습니다.

www: *확인된 도메인 이름은 www.54tianzhisheng.cn입니다.

*@: 기본 도메인 이름 54tianzhisheng.cn을 직접 확인합니다.

*: 범분석, 다른 모든 도메인 이름 *.54tianzhisheng.cn과 일치.

mail: 도메인 이름을 일반적으로 메일함 서버를 확인하는 데 사용되는 mail.54tianzhisheng.cn으로 확인합니다.

2차 도메인 이름: 예: abc.54tianzhisheng.cn, abc를 입력하세요.

모바일 웹사이트: 예: m.54tianzhisheng.cn, m을 입력하세요.


Java의 소켓 사용

일반 소켓 사용

Socket은 ServerSocket과 Socket의 두 가지 범주로 나뉩니다.

ServerSocket은 서버측에서 accept 메서드를 통해 요청을 수신할 수 있으며 요청을 수신한 후 Socket을 반환합니다.

Socket 사용자는 구체적으로 데이터 전송을 완료하고 클라이언트는 직접 Socket을 사용하여 요청을 보내고 전송합니다. 데이터.

방금 일방적으로 메시지를 보내는 데모를 작성했습니다:

클라이언트:

  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=" 색상:rgb(199,146,234);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(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;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>

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

  5. <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>

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

  7. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。</span> java.io

    .🎜OutputStream🎜;🎜🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">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- 크기: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;">소켓🎜<span style="color:rgb(204,204,204);line-height:20px;font-size: 13px !important;white-space: !important;">;🎜</span></span></span></span></span></span></span>🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: ! 중요;">/**🎜</span>🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * 10412에 의해 작성됨 2017/5/2.🎜</span>🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * TCP客户端:🎜 </span>🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp 소켓이 服务 , 最好明确具体的地址 와 端口.这个对象는 创建时,就已经可以对指定ip 와端 进行连接(三次握手)。🎜</span>🎜🎜🎜
  8. <span style=" color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②: 연결이 성공하면 채널이 설정되고 소켓 스트림이 있음을 의미합니다. 생성되었습니다. 소켓 스트림에서 읽기 스트림과 쓰기 스트림을 가져오고 getInputStream 및 getOutputStream을 통해 두 개의 스트림 개체를 가져옵니다. <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>

  9. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ③:关闭资源。</span>

  10. */
    //单方面的输入!
    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. <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;">InputStream</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;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>

    🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ③: 리소스를 닫습니다. 🎜</span>🎜🎜🎜🎜🎜
    /**
     * 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();
            }
        }
    }
    🎜

서버 끝 : 🎜

    🎜🎜🎜🎜<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">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; 글꼴 -size:13px !important;white-space: !important;">io🎜<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: 중요 ;">.🎜<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException🎜<span style="color: rgb (204,204,204);줄 높이:20px;글꼴 크기:13px !important;white-space: !important;">;🎜</span></span></span></span></span></span></span>🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(199,146,234);line-height:20px; 글꼴 -size:13px !important;white-space: !important;">import🎜<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: 중요 ;">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;">io🎜<span style="color:rgb(204,204,204);line-height:20px;font- 크기 :13px !important;white-space: !important;">.🎜<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important; >InputStream🎜<span style=" color:rgb>;🎜</span></span></span></span></span></span>🎜🎜🎜🎜🎜 🎜 🎜🎜<span style="color: rgb (199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">가져오기🎜<span style="color:rgb(238,255,255);line-height:20px;font- 크기 :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>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>🎜🎜🎜
  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;">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>

  2. /**
     * 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();
            }
        }
    }

위 내용은 웹사이트 아키텍처와 Spring MVC 코드 실습의 진화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 사양의 PSR 사양다음 기사:PHP 사양의 PSR 사양