내부 네트워크는 종종 1Gbps 이상의 연결을 사용합니다. 광섬유 연결 또는 본딩은 서버간에 훨씬 더 높은 대역폭을 허용합니다. 이제 API에서 JSON 응답의 평균 크기를 상상해보십시오. 1 초 안에 1Gbps 연결을 통해 이러한 응답을 얼마나 전송할 수 있습니까?
실제로 수학을하자. 1Gbps는 초당 131 072KB입니다. 평균 JSON 응답이 5KB (꽤 많은 경우) 인 경우 한 쌍의 시스템으로 회선을 통해 초당 26214 개의 응답을 보낼 수 있습니다 . 그렇게 나쁘지 않습니까?
이것이 네트워크 연결이 일반적으로 병목 현상이 아닌 이유입니다.
마이크로 서비스의 또 다른 측면은 쉽게 확장 할 수 있다는 것입니다. 하나는 API를 호스팅하고 다른 하나는 그것을 소비하는 두 개의 서버를 상상해보십시오. 연결에 병목 현상이 발생하면 두 개의 다른 서버 만 추가하면 성능이 두 배가됩니다.
이는 초당 26,214 개의 응답이 앱의 규모에 비해 너무 작을 때입니다. 다른 9 쌍을 추가하면 이제 262 140 개의 응답을 제공 할 수 있습니다.
그러나 우리의 서버 쌍으로 돌아가서 비교해 봅시다.
데이터베이스에 캐시되지 않은 평균 쿼리에 10ms가 걸리면 초당 100 개의 쿼리로 제한됩니다. 100 개의 쿼리 26,214 응답. 초당 26214 응답 속도를 달성하려면 많은 양의 캐싱 및 최적화가 필요합니다 (응답이 실제로 데이터베이스 쿼리와 같은 유용한 작업을 수행해야하는 경우 "Hello World"스타일 응답은 적합하지 않습니다).
내 컴퓨터에서 현재 Google 홈페이지 용 DOMContentLoaded는 394ms가 발생했습니다. 요청이 전송 된 후 초당 3 회 미만의 요청입니다. Programmers.SE 홈 페이지의 경우 603 ms가 발생했습니다. 요청이 전송 된 후 초당 2 건의 요청도 아닙니다. 그건 그렇고, 나는 100 Mbps 인터넷 연결과 빠른 컴퓨터를 가지고 있습니다 : 많은 사용자가 더 오래 기다릴 것입니다.
병목 현상이 서버 간의 네트워크 속도 인 경우 해당 두 사이트는 문자 그대로 페이지를 제공하는 동안 다른 API를 수천 번 호출 할 수 있습니다.
이 두 사례 네트워크 아마 이론에 병목 수 없음을 보여준다 (실제로, 당신의 병목 현상의 정확한 위치를 확인하기 위해 실제 벤치 마크 및 프로파일 링을 수행해야합니다 귀하의 특정 하드웨어에서 호스팅되는 특정 시스템을). 실제 작업 (SQL 쿼리, 압축 등)을 수행하고 최종 사용자에게 결과를 보내는 데 소요되는 시간이 훨씬 더 중요합니다.
데이터베이스에 대한 생각
일반적으로 데이터베이스는 데이터베이스를 사용하여 웹 응용 프로그램과 별도로 호스팅됩니다. 응용 프로그램을 호스팅하는 서버와 데이터베이스를 호스팅하는 서버 간의 연결 속도는 어떻습니까?
실제로 연결 속도에 문제가있는 경우, 즉 데이터베이스 자체에서 처리 할 필요가없고 현재 사용할 수있는 대량의 데이터 (즉, 큰 이진 파일)를 저장하는 경우가 있습니다. 그러나 이러한 상황은 거의 없습니다. 대부분의 경우 전송 속도는 쿼리 자체 처리 속도와 비교할 때 그리 크지 않습니다.
전송 속도가 실제로 중요한 것은 회사가 NAS에서 대용량 데이터 세트를 호스팅하고 동시에 여러 클라이언트가 NAS에 액세스하는 경우입니다. SAN이 솔루션이 될 수있는 곳입니다. 이것은 유일한 해결책은 아닙니다. Cat 6 케이블은 최대 10Gbps의 속도를 지원할 수 있습니다. 케이블이나 네트워크 어댑터를 변경하지 않고 속도를 높이기 위해 본딩을 사용할 수도 있습니다. 여러 NAS에서 데이터 복제를 포함하는 다른 솔루션이 있습니다.
속도를 잊어 버리십시오. 확장성에 대해 생각
웹앱의 중요한 점은 확장이 가능하다는 것입니다. 실제 성능은 중요하지만 (아직 더 강력한 서버에 비용을 지불하고 싶지 않기 때문에) 확장 성은 필요할 때 추가 하드웨어를 던질 수 있기 때문에 훨씬 더 중요합니다.
같은 방식으로 가상 머신은 10 년 전에 거대한 성능 문제로 인식되었습니다. 실제로 서버에서 응용 프로그램을 호스팅하는 것과 가상 컴퓨터에서 호스팅하는 것은 성능에 중요한 영향을 미쳤습니다. 오늘날의 격차는 훨씬 작지만 여전히 존재합니다.
이러한 성능 손실에도 불구하고 가상 환경은 유연성으로 인해 매우 인기가있었습니다.
네트워크 속도와 마찬가지로 VM이 실제 병목 현상이며 실제 규모에 따라 VM없이 앱을 직접 호스팅하여 수십억 달러를 절약 할 수 있습니다. 그러나 이는 앱의 99.9 %에서 발생하는 것이 아닙니다. 병목 현상은 다른 곳에서 발생하고 VM으로 인한 몇 마이크로 초 손실의 단점은 하드웨어 추상화 및 확장 성의 이점으로 쉽게 보상됩니다.