re:Inventã§ã®Logglyã®åæ£ã¹ããªã¼ã å¦çç°å¢ã«é¢ããã»ãã·ã§ã³ãé¢ç½ãã£ãã®ã§ã¾ã¨ãã¦ãã
ããã»ã©å¸°å½ãparse.comã®ã¡ã¢ã«å¼ãç¶ããre:Inventã§ã®Logglyã®ã»ãã·ã§ã³ã«ã¤ãã¦ãã¾ã¨ãã¦ããã
- ãè¿½è¨ 2013/11/20 9:20ãã¹ã©ã¤ããupããã¦ããã®ã§è²¼ã£ã¦ããã¾ãã
è¦ç´ããã¨ã
- ã客ãããã大éã«éããã¦ãããã°ããªã¢ã«ã¿ã¤ã ã«æãããã®ã·ã¹ãã
- æåã®è¨è¨ã§ã¯SolrCloudãå©ç¨ãã¦ãã
- 第äºä¸ä»£ã§ã¯Elasticsearchãå©ç¨ãã·ã¹ãã å ¨ä½ã¨ãã¦Elasticãªç°å¢ã«ã
- åºæ¬ç°å¢ã¯Kafka + Stormãªæ§æ
ã»ãã·ã§ã³ã®æ å ±ã¯ä»¥ä¸ã®ã¨ããã
ARC303 - Unmeltable Infrastructure at Scale: Using Apache Kafka, Twitter Storm, and Elastic Search on AWS
This is a technical architect's case study of how Loggly has employed the latest social-media-scale technologies as the backbone ingestion processing for our multi-tenant, geo-distributed, and real-time log management system. This presentation describes design details of how we built a second-generation system fully leveraging AWS services including Amazon Route 53 DNS with heartbeat and latency-based routing, multi-region VPCs, Elastic Load Balancing, Amazon Relational Database Service, and a number of pro-active and re-active approaches to scaling computational and indexing capacity.
The talk includes lessons learned in our first generation release, validated by thousands of customers; speed bumps and the mistakes we made along the way; various data models and architectures previously considered; and success at scale: speeds, feeds, and an unmeltable log processing engine.
Philip O'Toole - Senior Architect and Lead Developer, Loggly Jim Nisbet - CTO and VP of Engineering, Loggly
https://portal.reinvent.awsevents.com/connect/sessionDetail.ww?SESSION_ID=1246
çºè¡¨ã¹ã©ã¤ã
Infrastructure at Scale: Apache Kafka, Twitter Storm & Elastic Sear...
Logglyã«ã¤ãã¦ã¯ã
- log management as a service
- 2010å¹´ããawsã¤ãã£ã¦ã
- ã客ãããreal timeã«ãã°ãããã£ã¦ããã®ã§ãnear real-timeã«indexingãã¦ã
ã¨ã®ãã¨ã以ä¸ã»ãã·ã§ã³ãè´ããªãããã¤ã¼ãããå 容ã
13:30ãã"ARC303 - Unmeltable Infrastructure at Scale: Using Apache Kafka, Twitter Storm, and Elastic Search on AWS"ãèãäºå®ã§ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Logglyã®ã»ãã·ã§ã³ãlogã®volumeã¨self-inflicted painã®ã°ã©ãããã¬ã¼ã³ããã¦ãã¦ã¿ã¦ãã¦ããããææºè¼
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
$ sudo rm -rf /var/log/apache2 ã¨ããæãã³ãã³ããæ¸ããã¦ããã¹ã©ã¤ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Sumo Logic, Loggly, New Relic, DataDogã¨ãããããªmonitoringãµã¼ãã¹ã®è©±ãèãããªããªãçããã«ã³ãã¡ã¬ã³ã¹ã ããªãã¨ãµã¨æã£ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
åæã®LogglyãSolr cloudãå©ç¨ãæ°1000ã®ã·ã£ã¼ããqueueã«ZeroMQãEC2ã¤ã³ã¹ã¿ã³ã¹ã®ã¹ãã¬ã¼ã¸ãå©ç¨ã10 - 100k events / secã®æ§ã
ã客ããã1000ã¢ã«ã¦ã³ããããããã°ã®trafficã¯ãããã¼ã¹ãããã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
å¦ãã ãã¨ãindexingãæãå³ãããsolrã®åé¡ã§ä¸æçã«æåã§re-indexingããªããã°ãããªãã£ãããããã¾ããè¤æ°ã®indexingã®æ¦ç¥ãå¿
è¦ã ã£ãã10epsã¨100000+epsã®ã¦ã¼ã¶ã«ã¯ãã¨ãªãindexã®æ¦ç¥ãå¿
è¦ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
ãã¤ãlow volumeãªã¦ã¼ã¶ã«ã¤ãã¦ãªããéããã·ã¹ãã ã«ãªã£ã¦ãã¾ã£ã¦ããã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Apache Kafkaã®å©ç¨ã忣pub-subåã®ã¡ãã»ã¼ã¸ã³ã°ã·ã¹ãã ãpersistentãªã¡ãã»ã¼ã¸ã³ã°ãå¯è½ã§ãããé«ãã¹ã«ã¼ããããå¯è½ãZooKeeperãcluster管çã«å©ç¨ãqueueã¨topicã«ããã»ãã³ãã£ã¯ã¹ããµãã¼ãã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Kafkaã§ãã·ã³ä¸¦ã¹ãã50å°ã§400000msg/secãããã«ã¸ã¥ã¢ã«ã«ãã°ããããã«ãªã£ãããã¨ãã話
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Stormã«ã¤ãã¦ãSpout, Boltã®èª¬æãããã¦ãããã£ãKinesisã®èª¬æèããã®ã§æ¢è¦æããKinesis ApplicationãBoltã¿ãããªãã®ããã£ãã®ã¨ããã§ããã¨ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Kinesisã ã¨ãã®Zookeeperã«ãã管çã¨ãSupervisorã®é¨åãAWSãæã£ã¦ãããã¨ãããã¨ã«ãªãã£ã½ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Elastic Search in Actionã管çãç°¡åãåçã«ãã¼ãã追å åé¤ã§ãããattributeãnodeãindiceã«æããããã¨ãã§ãããã¾ããindiceã¯èªåçã«æé©ãªnodeã«ç°åãããindiceã¯shardingå¯è½ãã¾ããã«ã¯ã¤ã³ãµã¼ãããµãã¼ãã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Loggly第äºä¸ä»£ã常ã«ãã°ãåãå
¥ããããããã«ãlogã失ããªãããã«ãå
¨ã¦ã®ãã°ãã¯ãªãã£ã«ã«ãªãã®ã§ããã¨æ±ãããã«ãããã¾ããå®å
¨ã«Elastic(True Elasticity)ãªè¨è¨ã«ããã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Apache Kafkaãmessage queueingã«ã顧客ãqueueã®locationãtrackã§ããããã«ããã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
StormãEvent processingã«å©ç¨ãStormã"pull"ã·ã¹ãã ã¨ãã¦å©ç¨ãaverage loadã«ãã£ã¦ãããã¸ã§ãã³ã°ããããã«ãã¦ãããKafkaããqueueãå
¥åããã®ãããã¸ã§ãã³ã°ãAWSã¨ããããããworkerãåçã«å¢æ¸ã§ããã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Eventã®åéã¯+100ks/sec, TCP/UDPåã³HTTPããµãã¼ãã3ã¤ã®azã®collectorã«è»¢éãKafkaã®Brokerã«ãããæ¸¡ããbroker nodeã«ã¯EBSã®ãã¼ãã£ã·ã§ã³ãå²ãå½ã¦ããã¦ããããã®è¨è¨ã¯é常ã«ããã¹ãã§ä½¿ãåæãè¯ãã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
logglyã®ãã°ã³ã¬ã¯ã¿ã¯C++ã®ãã«ãã¹ã¬ããå®è£
ãBoostãå©ç¨ãããããã®ã³ã¬ã¯ã¿ã¯250k+ ã®ã¤ãã³ããm2.2xlargeã§å¦çãããã¨ãå¯è½ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
ã¹ãã¼ã¸ã³ã°ã¨ãããã¯ã·ã§ã³ç°å¢ã«ã¤ãã¦ãKafkaã®brokerã®ebsã®ä¸é¨ã®partitionãstagingã®ããã®ãã¼ã¿ã®processingã«å©ç¨ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Loggly, collector: c1.xlargeãKafka: m2.2xlargeããã£ã¹ã¯ã®ãããã¡ã§ãã£ãã·ã¥ãebs: 4K PIOPs EBSãstorm supervisor: c1.xlargeãnimbusã¨zookeeperã¯m1.xlarge
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
ããã¤ãã®å¤±æã«ã¤ãã¦ãcollectorã®ããã³ãã«elbãç½®ãã¦ãããããããelbã¯514(syslog)ãã¼ããforwardãã¦ãããªããã¾ãUDPããµãã¼ãããªããã¾ããburstæã«elbã®ããã©ã¼ãã³ã¹ã®éçã«éãã¦ãã¾ã£ãã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
Route 53 DNSã©ã¦ã³ãããã³ã使ã£ãã®ã¯è¯ãã£ããbasicãªæ¹æ³ãAWSã®health checkã®ä»çµã¿ã䏿ãå©ç¨ãããã¨ãåºæ¥ããã¾ããã©ã¦ã³ãããã³ã¯AZãregionãã¾ããã£ã¦ããã¾ãåä½ããã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
æåã®ãã©ã³ãcassandraãå©ç¨ããäºå®ã ã£ããwriteãæ©ãã®ããã£ã¦ãããå©ç¨ãããªãDataStaxã®ãµãã¼ããå©ç¨ãããã¨æã£ã¦ãããããããCassandraã¯ã¡ãã»ã¼ã¸ãã¥ã¼ã®ããã«ã¯ãã¶ã¤ã³ããã¦ããªãã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
ç·æ¬ã¨ãã¦ãè¯ãã£ããã¨ã¯AWSã®ãµã¼ãã¹ãã¬ããå¹ããã¦ä½¿ãããã¨ãmulti-region, azãPIOPSãRoute 53ã®DNSã«ããlatencyã®è§£æ±ºãStormã®ãªã½ã¼ã¹ãç°¡åã«å¢æ¸ããããããã¨ãããã¦Kafka, Storm, ESãæ¡ç¨ãããã¨ã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
è峿·±ãã»ãã·ã§ã³ã ã£ãã
— Kenta Suzuki (@suzu_v) 2013, 11æ 15
ææ
Kafkaã«ããmessage queueingããã¼ã¹ã¨ããdistributed stream processingã®è¨è¨ãè´ããã®ã¯ããã£ããã¡ããã©ãã®åã®ã»ãã·ã§ã³ãAmazon Kinesisã ã£ãã®ã§ãããã¨æ¯è¼ãã¦è´ããã¨ãåºæ¥ããSolr Cloudã¨Elasticsearchã®ããããã«ãããindexingã®æ¦ç¥ã«ã¤ãã¦ã¯ãã¾ãåèªèº«ã¯è©³ãããªãã®ã§ãã®ãããã¯ããå°ã調ã¹ããã¨ãããKafkaã«ã¤ãã¦ã¯ZooKeeperã«ããã¯ã©ã¹ã¿ã®ç®¡çããã¦ã¯ãããã®ã®ãå æ¥ã®parse.comã®ä¾ã®ããã«provisioningå¨ãã便å©ã«ä½ã£ã¦ãããªãã¨é¢åãããªå°è±¡ãkafkaããæµãã¦ããqueueãå¦çããããã¯ã¨ã³ãã®workerãåçã«ã³ã³ããã¼ã«ã§ããã®ã¯AWSãå©ç¨ããå ´åã®ã¡ãªããã§ããã¨è§¦ãããã¦ãã¦ãããã¯Kinesis Applicationã§ãåæ§ã®ãã¨ãè¨ãããã·ã¹ãã å ¨ä½ã¨ãã¦ããã³ãã®ãã°åéããstream processing, ããã¦Elasticsearchãããã¯ã¨ã³ãã«ç½®ããã¨ã§å ¨ä½ã¨ãã¦ã®elasticityãæ ä¿ãã¦ããã¨ãããã¹ãã¼ããªè¨è¨ã§ããããã«æããã
ã¾ãç´°ãã話ã ããã©ãstagingç°å¢ã®ããã«ãproductionç°å¢ã®Kafka brokerã®EBSã®ãããã¼ãã£ã·ã§ã³ã®ã¿æµãããããã«ãã¦ããã®ã¯è峿·±ãã£ããããããKafkaã®ããã¯ã¨ã³ãworkerã§å¦çããããã®ããã°ã©ã ã¨ããã®ã¯æ¬çªã®ãã¼ã¿ã§æ¤è¨¼ããã®ãä¸çªãªã®ã ããã©ããªããªãæ¤è¨¼ç°å¢ãä½ãã®ãé¢åã ã£ãããããä¾ãã°ãAmazon Kinesisã§ãç¹å®partitionãstagingç¨ã«æµããã¨ã§åæ§ã®æ¤è¨¼ãè¡ãããã«ãã®ãã¿ã¼ã³ãå©ç¨ãããã¨ãã§ããã ããã