Update 4: Jeff Atwood 는 Markus의 scale up 접근법을 scale out 접근법과 비교하여 비용을 산출하고 scale up 원할 때를 찾습니다. 댓글에 있는 의견은 기사만큼 흥미롭습니다. 내 추측은 Markus의 필요를 위해 scale up 작업이 더 좋고 더 비용이 든다고 해도 scale out클러스터를 가로지르는 그의 소프트웨어를 재작성하기를 원하지 않을 것입니다.
Update 3: POF가 2억개 이미지를 가지고 있고(POF now has 200 million images) 초당 만개의 이미지를 서비스합니다. 그들은 부하를 처리하기 위해 250,000 IOPS(Input/Output Operations Per Second) RamSan으로 이동하려 합니다. 핵심 데이터베이스 장비를 512GB 램과, SQLServer 2008과 Windows 2008로 업그레이드하려고 합니다.
Update 2: This seems to be a POF Peer1 love fest infomercial. 내용은 공짜이고 제품가치는 높습니다. 많은 변덕스러운 소리와 스크린에 수영하는 고기들.
Update: Facebook에 따르면 표준 Read/WriteWeb는 POF가 10억불의 가치(one billion dollars)가 있다고 말했다고합니다. 큰소리로 말할 때 Evil 박사와 말하는 것이 도움이 됩니다(무슨 말인지).
PlentyOfFish는 월 4500만명의 방문자와 일 3천만이 넘는 히트(초당 500-600 페이지)를 가지는 엄청나게 인기있는 온라인 데이팅 시스템입니다. 하지만 이게 흥미로운 이야기가 아닙니다. 이 모든 것을 혼자서 처리하는데, 몇 안되는 서버와 하루에 몇 시간만 일하면서, Google 광고로 년 6백만불을 법니다. 질투가 나죠? 나도 그렇습니다. 어떻게 적은 자원으로 이런 모든 남녀들을 연결할까요?
Site: http://www.plentyoffish.com/
Information Sources
Channel9 Interview with Markus Frind
Blog of Markus Frind
Plentyoffish: 1-Man Company May Be Worth $1Billion
The Platform
Microsoft Windows
ASP.NET
IIS
Akamai CDN
Foundry ServerIron Load Balancer
The Stats
PlentyOfFish (POF) 는 월 12억 페이지뷰, 일일 50만명의 고유한 로그인을 합니다. 성수기는 1월인데, 30%정도 성장합니다.
POF는 한 명만 고용합니다: 설립자이자 CEO인 Markus Frind.
하루 2시간 일하면서 Google 광고로 천만불을 법니다.
하루 30천만 이상 히트(초당 500-600 페이지)
월 11억 페이지 뷰와 45백만 방문자.
Facebook의 평가를 통해 5-10번 클릭.
Competes Attention metric에 근거한 미국내 30위 사이트, 캐나다 10위, 영국 30위 사이트
2대의 로드밸런싱 웹 서버 - 2 Quad Core Intel Xeon X5355 @ 2.66Ghz), 8 Gigs of RAM (using about 800 MBs), 2 hard drives, runs Windows x64 Server 2003.
3 DB servers. No data on their configuration.
동시 연결 64,000개에 근접하고 시간당 2백만 페이지 뷰
인터넷 연결은 200Mbps를 사용중인 1Gpbs 회선
Akamai를 통해 1억7100만 이미지를 제공하는데, 하루 1TB.
매월 사이트에 업로된 실제 크기의 이미지 수백만개를 처리하는 6TB 저장 배열.
What's Inside
수익 모델은 Google 광고를 이용합니다. 비교로 Mactch.com은 주로 가입비용을 받아 3억불을 법니다. POF의 수입 모델은 변화된 듯한데, 그들의 사용로부터 더 많은 수입을 얻기 위해서입니다. 계획은 더 많이 고용하고, 영업망을 확충하고 AdSense에 홀로 의존하는 대신에 광고를 직접팔려고 합니다.
일 3천만 페이지뷰는 CPM 5-10센트로 좋은 수입을 만들 수 있습니다.
Akamai는 일일 1억개 이상의 이미지 요청을 처리합니다. 8개의 이미지를 가지고 있고 각 100ms가 소용되면 이미지를 위해 1초를 사용하는 것입니다. 그래서 이미지 분산은 말이 됩니다.
천만개의 이미지 요청은 서버로부터 직접 서비스되지만, 그러나 이 이미지들의 주요한 부분은 2KB보다 작고 대부분 RAM에 캐시됩니다.
모든 것은 동적입니다. 정적인 것은 없습니다.
모든 나가는 데이터는 30% CPU 사용량의 비용으로 Gzip 압축됩니다. 이것은 서버들에 처리 전력에 적용되지만, 대역폭 사용량을 줄여줍니다.
ASP.NET에 있는 어떤 캐시 기능도 사용하지 않습니다. 데이터가 캐시에 들어가자마자 만료되기 때문에 사용하지 않습니다.
ASP로부터 어떤 내장 컴포넌트도 사용하지 않습니다. 모든 것을 밑바닥에서 개발했습니다. if-then, foor 루트만큼 복잡한 것이 없습니다. 단순해지세요
로드 분산
- IIS는 임의로 총 64000개의 연결을 제한하므로 매우 큰 동시 연결을 처리하도록 로드밸런스를 추가합니다. 두번째 IP주소를 추가하고 라운드로빈 DNS 사용을 고려했으나, 로드 밸런서가 더 불필요하고 더 많은 웹 서버를 더 쉽게 바꾸는 것을 허용하기 때문에 고려되었습니다. ServerIron 사용은 bot 블럭, 쿠기, 세션 데이터, IP 데이터에 근거한 로드밸런싱 같은 진보된 기능을 허용합니다.
- Windows Network Load Balancing (NLB) 기능은 사용하지 않는데 불편한 세션을 처리할 필요가 없기 때문입니다. 이 방법은 세션 데이터를 데이터베이스나 공유 파일 시스템에 저장해야 합니다.
- 8-12개의 NLB 서버를 하나의 팜에 넣을 수 있는데, 팜의 갯수에는 제한이 없습니다. DNS 라운드 로빈 스키마는 팜들간에 사용됩니다. 이런 아키텍처는 30만 동시 사용자를 지원하는 70개의 프론트 엔드 웹 서버를 가능하게 해줍니다.
- NLB는 밀접한 옵션을 가지고 있는데 그래서 사용자는 항상 특정한 서버로 연결되고, 따라서 어떤 외부 저장소도 세션 데이터를 위해 사용되지 않으며 서버가 장애가 나면 사용자는 그들의 상태를 잃어버리고 재로그인해야 합니다. 이 상태가 쇼핑 카드나 다른 중요한 데이터를 포함하면, 이 솔루션은 매우 빈약하지만, 데이트 사이트에서는 받아들일만 합니다.
- 소프트웨어로 세션 데이터를 저장하고 불러오는 비용이 너무 비싸다는 것을 생각하세요. 하드웨어 로드 밸런싱이 단순합니다. 특정 서버로 단지 사용자를 지정하고 서버가 장애가 나면 사용자는 다시 로그인하면 됩니다.
- ServerIron 의 비용은 NLB를 이용하는 것보다 저렴하고 단순합니다. 많은 주요 사이트들이 TCP 연결 풀링과 자동 봇 탐지를 위해 ServerIron 를 사용합니다. ServerIron 은 로드 밸런싱 이상의 일을 하며 이 기능들은 비용대비하여 매력적입니다.
광고 서버를 선택할 때 큰 문제가 있었습니다. 광고 서버 팜은 년당 수십만 달러 이상이었는데 다년 계약을 원했습니다.
In the process of getting rid of ASP.NET repeaters and instead uses the append string thing or response.write. If you are doing over a million page views a day just write out the code to spit it out to the screen.
Most of the build out costs went towards a SAN. Redundancy at any cost.
Growth was through word of mouth. Went nuts in Canada, spread to UK, Australia, and then to the US.
데이터베이스
- 하나의 데이터베이스는 주 데이터베이스입니다.
- 두개의 데이터베이스는 검색용입니다. 검색 서버간의 로드 밸런싱은 검색 수행 조건에 따릅니다.
- 태스크 관리자를 이요하여 성능을 감시하세요. 급등은 조사할 것을 보여줍니다. 문제는 보통 데이터베이스의 블럭킹입니다. 언제나 데이터베이스 이슈입니다. .net은 거의 문제가 없는데 POF가 .net 라이브러리를 사용하지 않기 때문이고 상대적으로 성능 문제를 추적하기 쉽게 해줍니다. 많은 프레임워크 층을 사용한다면 어디서 문제가 밸생하는지 찾기는 불만스럽고 어렵습니다.
- 페이지당 데이터베이스를 20배 이상 부를수 있다면 여러분이 하고 싶은 일에 문제가 없습니다(If you call the database 20 times per page view you are screwed no matter what you do).
- 쓰기로부터 데이터베이스 읽기를 분리하세요. 충분한 RAM을 가지고 있지 않다면, 여러분의 시스템을 수초동안 멈추게하는 페이징을 얻을 수 있습니다.
- 가능하다면 읽기 전용 데이터베이스를 시도하고 만드세요.
- 데이터를 반정규화하세요(Denormalize data). 20개의 다른 테이블에서 패치하고 있다면 단지 읽기를 위해서 하나의 테이블로 만들도록 하세요.
- 어느날 동작했지만, 데이터베이스가 2배로 커지면 더 이상 동작하지 않을 수 있습니다.
- 시스템에 한가지만 했다면 정말로 잘 한 것입니다. 단지 쓰기만 하고 그게 좋은 것입니다. 단지 읽기만 하고 그게 좋은 것입니다. 이들을 혼합하면 일을 엉망으로 만듭니다. 여러분은 락킹과 블럭킹 이슈에 빠집니다.
- CPU를 최대로 사용하고 있다면 무엇인가 잘못했거나 최적화되어야 합니다. 램에서 데이터베이스에 이를 고치려면 그렇게 하세요.
개발 과정 : 아이디어를 따라잡습니다. 24시간 안에 끝내버립니다. 절반의 작업입니다. 사용자가 응답하는 것이 사이트에서 실제로 하는 것을 보는 것으로 알아냅니다. 사용자 당 메시지가 증가했습니까? 세션 타임이 증가했습니까? 사람들이 좋아하지 않으면 내려놓으세요.
시스템 장애는 드물며 잠시 동안입니다. 가장 큰 이슈는 몇몇 ISP들이 POF가 존재하지 않는다고 응답하는 DNS 이슈입니다. 그러나 사이트가 무료여서, 사람들이 약간의 다운 타임을 받아들입니다. 사람들은 자주 사이트 다운을 통보받지 못하는데 그들의 문제라고 생각하기 때문입니다.
백만에서 천2백만 사용자로 가는 것은 커다란 도약이었습니다. 두 웹서버로 6천만 사용자로 확장할 수 있습니다.
자주 아이디어와 새로운 기능을 위해 경쟁자를 살펴봅니까.
지리적인 로드밸런싱을 할 대를 위해 S3 같은 것을 검토합니까?
배운 교훈
좋은 수입을 만들기 위해 수백만 달러의 펀딩, 방대한 인프라, 사용자가 마구 들어오는 세계적인 최상위 웹 사이트를 만들기 위해 많은 고용원을 필요로 하지 않습니다. 필요한 모든 것은 사용자에게 관심을 끌 아이디어, 구전으로 날아오르는 사이트, 전형적인 교환의 함정으로 빠지는 실패 없는 경험과 비전입니다. 이게 필요한 모든 것입니다:-)
필요는 모든 도전의 어머니입니다(Necessity is the mother of all change).
빠르게 성장하지만, 너무 빠르지 않다면, 여러분은 성장, 수정, 적응할 기회를 맞이합니다.
RAM은 모든 문제를 해결합니다. 그 후에 더 큰 장비를 이용하여 성장할 수 있습니다.
시작할 때 가능한 한 모든 것을 단순하게 유지하세요. 모든 사람들에게 이와 동일한 조언을 하는데 Markus 는 그가 한 모든 것에 대해 말하는 주목할 지점은 단지 분명한 상식입니다. 그러나 분명하게 단순함이 단지 상식은 아닙니다. 단순함을 만드는 것은 다년간의 실천 경험의 결과입니다.
데이터베이스 접근을 빠르게 유지하면 어떤 이슈도 없습니다.
POF가 적은 사람들과 적은 장비로 운영할 수 있는 가장 큰 이유는 엄청나게 큰 컨텐츠를 제공하는 CDN을 사용하기 때문입니다. CDN 사용은 많은 큰 사이트들에서 비밀 소스일지 모릅니다. Markus는 상위 100개 사이트에서 CDN을 사용하지 않는 단일 사이트는 없다고 생각합니다. CDN이 없었다면 호주에서 로드 타임은 3-4초 정도인데 모든 이미지때문일 것입니다.
Facebook에 광고는 저조한 결과를 가져왔습니다. 2000클릭당 1명 가입했습니다.With a CTR of 0.04% Facebook gets 0.4 clicks per 1000 ad impressions, or .4 clicks per CPM. At 5 cent/CPM = 12.5 cents a click, 50 cent/CPM = $1.25 a click. $1.00/CPM = $2.50 a click. $15.00/CPM = $37.50 a click.
높은 CPM단가로 수백만 페이지 뷰를 파는 것이 쉽습니다. Myspace와 Facebook에서 봤듯이 높은 CPM 단가로 수십억 페이지뷰를 파는 것이 매우 어렵습니다.
광고 지원 모델은 수익을 제한합니다. 더 크기 위해서는 지불 모델로 가야합니다. 무료 사이트로 년 1억불은 너무 큰 시장을 필요로 하기 때문에 사실상 불가능합니다.
데이팅 사이트를 위해 Facebook을 통한 페이지뷰 성장을 더 이상 동작하지 않습니다. 사이트에 방문자를 가지는 것은 더 많이 수익을 가져다 줍니다. Facebook의 페이지 뷰 대부분은 미국 외부에서 오고 5센트 CPM을 Facebook가 나누어야 합니다.
Co-req는 수입의 잠재적인 커다란 원천입니다. 이것은 주택대출에 사용자 정보를 보내는 사이트 등록을 제공하고 다른 제품들도 그렇습니다.
여러분은 항상 사용자의 응답에 귀 기울일 수 없습니다. 몇몇은 새로운 기능을 좋아하고 다른 사람들은 싫어합니다. 일부만 불평합니다. 대신에 사이트를 살펴보아 사람들이 실제로 사용하는 기능을 찾아내세요.
관련 기사
MySpace also uses Windows to run their site.
Thanks to Erik Osterman for recommending profiling PlentyOfFish.