12306.cn에서 대규모 웹 사이트의 아키텍처 및 성능 최적화에 대한 심도있는 좋은 기사 토크

12306.cn 웹 사이트가 다운되었습니다,조국 사람들에게 욕을 먹었다。지난 이틀 동안 이것에 대해 생각했습니다.,이 문제를 사용하여 귀하와 웹 사이트의 성능에 대해 대략적으로 논의하고 싶습니다.。서두름 때문에,전적으로 나의 제한된 경험과 이해를 바탕으로,그래서,궁금한 사항이 있으면 함께 토론하고 수정하십시오.。(이것은 또 다른 긴 기사입니다.,성능 문제만 논의,해당 UI에 대해 논의하지 마십시오.,사용자 경험,또는 티켓 구매 주문과 결제를 분리하는 기능적인 것인지 여부) 비즈니스 모든 기술은 비즈니스 요구 사항과 분리할 수 없습니다.,그래서,성능 문제를 설명하기 위해,먼저 비즈니스 문제에 대해 이야기하고 싶습니다.。 중 하나,어떤 사람들은 이것을 QQ나 온라인 게임과 비교할 수 있습니다.。하지만 둘은 다른 것 같아요,온라인 게임 및 QQ는 온라인 또는 로그인 시 사용자 자신의 데이터에 더 많이 액세스합니다.,예약 시스템은 센터의 티켓 볼륨 데이터에 액세스합니다.,그것은 다르다。온라인 게임이나 QQ가 될 수 있다고 생각하지 말고 그냥 같다고 생각하세요.。전자 상거래 시스템과 비교할 때 온라인 게임 및 QQ의 백엔드 로드는 여전히 간단합니다.。 두번째,어떤 사람들은 춘절 기간에 기차를 예약하는 것이 웹사이트의 플래시 세일과 같다고 말합니다.。정말 비슷하다,그러나 당신의 생각이 표면에 있지 않다면,조금 다르다는 걸 알게 될거야。기차표에 대해,한편으로는 많은 수의 쿼리 작업이 수반됩니다.,게다가 BT는 주문을 할 때 데이터베이스에서 많은 일관된 작업이 필요하다는 것입니다.,한편으로는 시작점에서 끝점까지 각 구간 티켓의 일관성입니다.,반면에,구매자 경로、기차 번호、많은 시간 옵션이 있습니다,주문 방식은 계속 변경됩니다.。그리고 스파이크,그냥 죽여,쿼리 및 일관성 문제가 많지 않음。게다가,세크킬에 대하여,처음 N 사용자의 요청만 수락하도록 만들 수 있습니다(백엔드에서 데이터를 전혀 작동하지 않음)., 사용자의 주문 작업 로그일 뿐입니다.),이런 종류의 사업,메모리 캐시에 죽일 수 있는 시간(초)만 입력하면 됩니다.,데이터 배포도 가능,100상품,10하나의 서버는 10을 넣습니다.,당시에 데이터베이스를 운영할 필요가 없습니다.。주문 수에 충분한 후,스파이크를 중지,그런 다음 배치로 데이터베이스에 쓰기。그리고 초 단위로 판매되는 제품은 많지 않습니다。기차표는 플래시 판매만큼 간단하지 않습니다,봄 축제 여행 시간,거의 모든 티켓이 핫 티켓,그리고 전국에서 온 거의 모든 사람들이,그리고 양도 사업도 있습니다,여러 재고 라인에 트랜잭션 작업이 필요합니다.,생각해봐,이게 얼마나 힘든 일이야。(타오바오의 더블일레븐은 사용자가 300만명에 불과하다.,그리고 기차표는 순식간에 수천만, 심지어 수억의 레벨을 가지고 있습니다)(업데이트됨):20141월 11일:타오바오에 접속 후,타오바오의 시스템에 익숙하다,타오바오의 스파이크 활동,본질적으로 사용자는 CDN에 인증 코드를 입력하여 직접 필터링됩니다.,같은:1수천만 명의 사용자가 필터링되고 20,000명의 사용자만 남습니다.,이런 식으로 데이터베이스가 견딜 수 있습니다) 셋째,어떤 사람들은 이 시스템을 올림픽 티켓팅 시스템과 비교합니다.。아직은 다른 것 같아요。올림픽 티켓팅 시스템도 온라인화되자마자 폐지됐지만。그러나 올림픽 게임은 복권을 사용합니다.,즉, 선착순 접근 방식이 없습니다.,그리고,그것은 나중에 생각하는 복권입니다,사전에 정보를 받기만 하면 됨,사전에 데이터 일관성을 보장할 필요 없음,자물쇠가 없다,수평으로 확장하기 쉽습니다.。 네번째,예약 시스템은 전자 상거래 주문 시스템과 매우 유사해야 합니다.,인벤토리를 수행해야 합니다.:1) 인벤토리를 점유,2) 지불하다(선택사항),3) 재고 운영 차감。일관성 검사가 필요합니다.,즉, 동시성 동안 데이터를 잠글 필요가 있습니다.。B2C 전자 상거래 회사는 기본적으로 이를 비동기적으로 수행합니다.,즉 말하자면,주문이 즉시 처리되지 않습니다,하지만 지연된 처리,성공적으로 처리된 경우에만,시스템에서 주문이 성공했다는 확인 이메일을 보냅니다.。많은 친구들이 실패한 확인 이메일을 받은 것 같습니다.。이것은,데이터 일관성은 동시성에서 병목 현상입니다.。 다섯,철도 발권 사업은 음란하다,갑작스런 석방,그리고 일부 투표는 모두가 공유하기에 충분하지 않습니다.,그래서,그래야만 모든 사람이 중국 특성을 가진 비즈니스인 티켓 예매를 할 수 있습니다.。그래서 티켓이 발매되었을 때,수백만 또는 수천만 명의 사람들이 죽임을 당할 것입니다.,조회,주문。수십 분 이내,웹 사이트는 수천만 명의 방문을 받을 수 있습니다.,이것은 무서운 일이다。12306의 피크 방문은 10억 PV라고 합니다.,오전 8시부터 오전 10시까지 집중한다.,정점에서 초당 수천만 PV。 몇 마디 더 말해봐: 인벤토리는 B2C의 악몽입니다.,재고 관리는 상당히 복잡합니다.。믿을 수 없어,모든 전통 및 전자 상거래 비즈니스를 요청할 수 있습니다.,재고 관리가 얼마나 어려운지 확인하십시오.。그렇지 않으면,뱅클 인벤토리 물어보는 사람 별로 없을듯。("Jobs Biography"도 읽을 수 있습니다.,Tim이 Apple의 CEO로 취임한 이유를 알 수 있습니다.,주된 이유는 그가 애플의 재고 사이클 문제를 해결했기 때문입니다.) 웹 사이트의 경우,웹 브라우징의 높은 부하를 쉽게 처리할 수 있습니다.,쿼리 로드를 처리하기 어렵습니다.,그러나 쿼리 결과를 캐싱하여 여전히 수행할 수 있습니다.,가장 어려운 것은 주문의 부담。인벤토리 액세스용,주문을 위해,기본적으로 비동기식으로 수행됩니다.。지난해 더블 11,Taobao의 시간당 주문 수는 약 600,000입니다.,Jingdong은 하루에 400,000만 지원할 수 있습니다(12306보다 더 나쁨).,아마존은 5년 전에 한 시간에 700,000건의 주문을 지원할 수 있었습니다.。보이는,주문하는 것이 우리가 원하는 만큼 성능이 좋지 않습니다.。 Taobao는 B2C 웹 사이트보다 훨씬 간단합니다.,창고가 없기 때문에,그래서,동일한 제품의 재고를 업데이트하고 쿼리하는 N개의 창고가 있는 B2C와 같은 작업은 없습니다.。주문할 때,B2C 웹사이트에서 창고를 찾아야 합니다.,사용자와 가까운,다시 재고가,이것은 많은 계산이 필요합니다。상상 해봐,당신은 베이징에서 책을 샀습니다.,북경 창고 품절,주변 창고에서 옮겨드립니다.,그런 다음 Shenyang 또는 Xi'an의 창고로 이동하여 재고가 있는지 확인하십시오.,없는 경우,강소 창고를 다시 봐야 한다,기다리다。타오바오는 별로입니다.,각 판매자는 자체 인벤토리를 가지고 있습니다.,재고는 숫자입니다,그리고 인벤토리는 상인들에게 분배됩니다.,오히려 성능 확장에 도움이됩니다.。 데이터 일관성은 실제 성능 병목 현상입니다.。어떤 사람들은 nginx가 초당 100,000개의 정적 요청을 처리할 수 있다고 말합니다.,나는 의심하지 않는다。하지만 정적 요청일 뿐입니다.,이론적 가치,대역폭만큼、I/O가 충분히 강함,서버의 컴퓨팅 성능이 충분합니다.,그리고 지원되는 동시 연결 수는 100,000개의 TCP 연결 설정을 견딜 수 있습니다.,그건 문제 없어。그러나 데이터 일관성에 직면하여,이 100,000은 완전히 도달할 수 없는 이론적 가치가 되었습니다.。 나는 너무 많이 말했다,나는 단지 당신에게 사업에서 말하고 싶습니다,우리는 비즈니스 관점에서 봄 축제 철도 티켓 예매 사업의 이상을 진정으로 이해해야 합니다.。 성능 문제를 해결하기 위한 프론트엔드 성능 최적화 기술,많은 일반적인 방법이 있습니다,아래에 나열합니다,12306은 다음과 같은 기술을 활용하여 질적인 성능 향상을 이루리라 믿습니다.。 하나、프런트엔드 부하 분산 DNS의 부하 분산 장치(일반적으로 라우터의 경로 부하에 따라 리디렉션됨)를 통해 사용자의 액세스를 여러 웹 서버에 고르게 분산시킬 수 있습니다.。이렇게 하면 웹 서버의 요청 부하가 줄어듭니다.。http 요청은 모두 짧은 작업이기 때문에,그래서,이는 매우 간단한 로드 밸런서로 수행할 수 있습니다.。사용자가 가장 가까운 서버에 연결할 수 있도록 CDN 네트워크를 보유하는 것이 가장 좋습니다(CDN에는 일반적으로 분산 저장소가 수반됨).。(로드 밸런싱에 대한 자세한 설명은 "백엔드 로드 밸런싱" 참조) 2、프런트엔드 링크 수 줄이기…

너무 많은 MySQL 절전 연결 해결

  show processlist 실행;절전 상태에서 많은 수의 연결을 인쇄 한 후,2 ~ 300 개가있을 수 있습니다, 클라이언트가 데이터베이스와 통신한 후에는 해제되지 않습니다.。연결 수가 많으면 시스템이 심각하게 느려집니다.,새로운 MySQL 연결 설정 차단, 심지어 MySQL이 오류를보고하도록합니다., 응답하지 않음。 문제의 근본 원인은 다음 3가지 상황입니다. 1. 너무 많은 영구 연결을 사용합니다. 2. 프로그램에서,mysql 연결이 제 시간에 닫히지 않습니다. 3. 데이터베이스 쿼리가 충분히 최적화되지 않았습니다.,시간이 많이 소요되는 가장 근본적인 방법은 위의 세 가지 상황에서 조사하는 것입니다. 1. 프로그램에서,영구 링크를 사용하지 마십시오,즉, pconnect 2 대신 mysql_connect를 사용합니다. 프로그램이 실행됩니다.,Mysql_close를 명시적으로 호출해야 함 3. 시스템의 SQL 쿼리만 단계별로 분석 가능,느린 쿼리 로그 활성화,비효율적 인 SQL 문 식별,그런 다음 최적화하십시오. 이것은 R&D 관점에서 조사한 것입니다.,코드 변경이 편리하지 않은 경우, 문제를 다시 해결하고 싶다, 그런 다음 mysql 자체의 타임 아웃 기능에 의존하여,명령줄에 mysql 입력> 다음과 같은 전역 변수 표시 “%타임 아웃 %”;…

Oracle 11gR2 RAC + DG4를 다시 수행하십시오.

파트 3은 dg 대기 라이브러리에 대한 RAC 기본 라이브러리의 로그 동기화를 완료했습니다.. 이 부분은 dg standby 데이터베이스 응용 프로그램에 의해 동기화된 로그를 구성합니다.. 그런 다음 RAC 및 dg의 역할 교환 완료. 대기 데이터베이스가 로그 SQL을 적용하는지 확인> 시퀀스 선택# ,이름 ,v$archived_log에서 적용됨; SEQUENCE# 이름 적용됨 ———- ———————————————————————- ——— 24 +FLASH/phydb/archivelog/2016_06_23/thread_1_seq_24.264.915256125 아니요 22 +FLASH/phydb/archivelog/2016_06_23/thread_1_seq_22.262.915256125 아니요 23…

Oracle 11gR2 RAC + DG3을 다시 수행하십시오.

이전 부분은 dg standby database asm 디스크 그룹을 구성했습니다.,RAC 메인 라이브러리 준비, 이 부분은 dg 대기 데이터베이스 준비를 계속합니다.,초기화 파일, 제어 파일,데이터베이스 파일 복구, 대기 로그 파일 생성,RAC 메인 라이브러리에서 dg 스탠바이 라이브러리로 로그 동기화 등. node1 node/rman_backup에서 데이터베이스 파일 백업, 초기화 파일,제어 파일, 아카이브된 모든 로그는 dg의 /rman_backup 아래에 복사됩니다. 이것은 node1의 /rman_backup/ 아래에 백업 파일입니다. 이 파일을 FTP를 통해 전달,또는 다른 방법으로 dg 대기 라이브러리의 /rman_backup 디렉토리로 전송하십시오.,전송은 다음과 같이 수행됩니다: 물리적 대기 데이터베이스는 암호 파일을 생성합니다. dg는 .bash_profile을 다음과 같이 편집합니다.: 내보내기 경로 내보내기 TMP=/tmp 내보내기 TMPDIR=$TMP 내보내기 ORACLE_HOSTNAME=dg.localdomain 내보내기 ORACLE_SID=phydb 내보내기 ORACLE_BASE=/u01/app/oracle…

Oracle 11gR2 RAC + DG2를 다시 수행하십시오.

이 부분에서는 dg Standby 데이터베이스의 asm 디스크 그룹을 생성하기 시작합니다.,그런 다음 RAC 기본 라이브러리 준비 작업을 수행합니다.。 dg Standby 데이터베이스를 그리드 사용자로 전환,asmca를 실행하여 구성을 시작하고 DATA 디스크 그룹을 생성합니다.,미래에 데이터가 저장될 곳입니다.. 잠시 기다리면 생성이 완료되며, 동일한 방법으로 FLASH 디스크 그룹을 생성합니다.,다음과 같이 완료하세요.:   dg는 oracle 사용자로 전환합니다.,방금 생성된 디스크 그룹을 확인하십시오. su -grid sqlplus / sysdba로 v$asm_diskgroup에서 이름 선택; 이름 ———————————————————————————— DATA GRIDDG FLASH ASM 디스크 그룹이 성공적으로 생성된 것을 볼 수 있으며, 방금 생성한 /dev/sde 디스크가 ext3 파티션으로 포맷되었기 때문에 마운트합니다.,따라서 /rman_backup 디렉터리에 직접 마운트할 수 있습니다.…

Oracle 11gR2 RAC + DG1을 다시 수행하십시오.

https에서://www.roamway.com/1273.html에서,RAC 데이터베이스가 구성되었습니다., 이번에는 RAC 이중 시스템을 기반으로 DataGuard 서비스를 구성합니다., 메인 라이브러리와 대기 라이브러리 간 빠른 전환 실현 가능, 재해 복구 및 백업 기능 제공. 이 부분,Dataguard 시스템 플랫폼을 배포해야 합니다., ASM 서비스 구성,그런 다음 단일 노드 그리드를 설치하십시오., 마지막으로 오라클 소프트웨어를 설치합니다.. 세부 사항은 다음과 같습니다: 1. 운영 체제를 설치, 이번에는 여전히 OEL5.5 x64를 사용합니다. , 20GB 로컬 디스크, hostnamedg.localdomain , IP 주소 192.168.137.159 ,iptables 및 selinux를 활성화하지 마십시오.. 사용자 정의할 때 다음 설치 패키지를 선택하십시오.: 데스크탑 환경: 그놈 데스크탑…

Linux 별칭 네트워크 카드 재 인쇄 설정

  什么是ip别名? 用windows的话说就是为一个网卡配置多个ipwhen 什么场合增加ip别名能派上用场? 布网需要、다중 IP 접속 테스트、특정 소프트웨어에 대해 여러 IP가 필요함…등등. how 下面通过几个例子简单介绍一下如何使用ifconfig命令给网卡配置ip别名。 IP/마스크/DNS/게이트웨이/라우팅 구성에 관해서,请见路由器/Linux主机/win下主机的路由配置汇总篇。 노트:구성이 즉시 적용되는지 아니면 영구적인지 주의 깊게 살펴보세요.。 하나、首先为服务器网卡配置静态ip地址 #ifconfig eth0 192.168.6.99 넷 마스크 255.255.255.0 upeth0

매우 중요한 안전 규정

웹 보안 원칙 1. 인증 모듈은 무차별 대입 크래킹 메커니즘을 채택해야 합니다.,예 ::인증 코드 또는 계정 또는 IP를 잠그기 위한 여러 번의 연속 로그인 실패。 기술:예를 들어, 로그인 시도가 여러 번 연속적으로 실패한 후 계정 또는 IP가 잠깁니다.,지속적인 로그인 실패 잠금 전략을 지원하기 위해 "허용되는 연속 실패 횟수"를 구성할 수 있습니다.,잠금 시간 만료 후 자동 잠금 해제 지원。 2. 액세스 권한이 필요한 페이지 또는 서블릿에 대한 각 요청에 대해 사용자의 세션 ID가 유효한지 확인해야 합니다.、사용자 권한 부여 여부 3. 이 작업을 수행할 권리,URL 미승인 방지를 위해。 기술:사용자가 URL을 직접 입력하는 것을 방지,URL 울트라 바이어,일부 페이지 또는 서블릿 요청 및 실행;필터를 통해 달성하는 것이 좋습니다.。 4. 로그인 과정에서,사용자 이름과 암호를 서버에 전달할 때,HTTPS 보안 프로토콜(즉, 서버 측 인증서가 있는 SSL)을 사용해야 합니다.。 로컬 액세스만 제공、로그인,장치 관리 시나리오 사용에는 일시적으로 필요하지 않습니다.。 기술:클라이언트와 서버 간에 계정이 전달되는 경우、비밀번호와 같은 민감한 데이터,서버 측 인증서와 함께 SSL을 사용해야 합니다.。SSL은 서버에서 많은 CPU 리소스를 사용하기 때문에,구현하는 동안 서버의 경제성을 고려해야 합니다.。 5. 사용자의 최종 인증 프로세스는 서버에 있어야 합니다.。 6. 사용자가 생성한 데이터는 서버에서 확인해야 합니다.;데이터는 클라이언트에 출력하기 전에 HTML로 인코딩되어야 합니다.,악성코드의 실행을 방지하기 위해、사이트 간 스크립팅。신뢰할 수 없는 데이터의 경우,HTML 인코딩은 클라이언트에 출력하기 전에 수행되어야 합니다.。 7. 주류 웹 보안 스캐닝 도구를 사용하여 웹 서버 및 웹 애플리케이션 스캔,"높은" 수준의 취약점 없음。 8. 비임베디드 제품용 웹 애플리케이션,Statement를 실행하려면 직접 문 대신 PreparedStatement를 사용해야 합니다., SQL 인젝션을 방지하려면。 데이터베이스 보안 아웃소싱 데이터베이스、오픈 소스 데이터베이스、자체 개발한 모든 데이터베이스는 안전하게 구성되어야 합니다.,보안 침해가 없는지 확인。 1. 데이터베이스 암호는 데이터베이스 제조업체의 기본 암호 사용을 금지합니다.,그리고 암호 복잡성은 "암호 보안 요구 사항"을 충족해야 합니다.。…