Advent Calendar 2015ã®13æ¥ç®ã®è¨äºã§ãã
ä»ãã¡ã§åãã¦ããCrawlerã¯æ°å¹´åã«ä½ããããã®ã§ã
ä»çµã¿ã¨ãã¦ã¯Azureã®Service Fabricã®ä¸ã§AWSã®Lambdaãåããã¦ããã®ã¨ä¼¼ãã¢ã¼ããã¯ãã£ã«ãªã£ã¦ããã
ããããçã¾ãå¤ããã®é ããªã¨æãã
çã¾ãå¤ããã«ããã£ã¦ãããããã®ã¢ã¼ããã¯ãã£ãã©ãããããã¨æ©ãããã ãã©ã
ãããªæã«ã¯éå»ã«é¡ã£ã¦ããã¨æ¬¡æ代ã¸ã®ãã³ãã転ãã£ã¦ãããã¨ãããããã
ç¹ã«ãéå»ã«æåããç´ æ´ãããã¢ã¼ããã¯ãã£ãä»ã®æè¡ã§ããã°ä¸è¬æã«ãå®ç¾å¯è½ã«ãªã£ã¦ãããããã
æ話
æã
ä¸çã«ã¯Inktomiã¨ããä¼ç¤¾ã¨
AltaVistaã¨ããä¼ç¤¾ããã£ãã
Inktomiã¨ããä¼ç¤¾ã¯ã½ããã¦ã§ã¢éçºä¼ç¤¾ã§ã2002å¹´ã«ç±³Yahoo!ã«è²·åããã¦ããã
AltaVistaã¯æ¤ç´¢ã¨ã³ã¸ã³ã®ä¼ç¤¾ã ã£ããã2003å¹´ã«Overture社ãè²·åãã
2003å¹´ã«Overture社ãç±³Yahoo!ã«è²·åãã¦ããã
詳ããæ´å²çã¯Wikipediaãè¦ã¦ãããã°è¯ãã¨ãã¦ããã®ï¼ç¤¾ã¯ãã£ããè¨ãã¨ã©ã¡ããã¯ãã¼ã©ãæã¡ã
æ¤ç´¢ãµã¤ãã¨ãã¦ããããã¯æ¤ç´¢ã¨ã³ã¸ã³ã®APIæä¾ã¨ãã¦ä¸æ代ãç¯ããï¼ã¤ã®ä¼æ¥ã
ãã®äºã¤ã®ä¼æ¥ã§ã¯ãcrawlingã¨indexingã«ã¤ãã¦å¤§ããéãææ³ãæã£ã¦ãã£ã¦ããã
AltraVistaã¯DEC Alphaã®é«æ§è½å·®ãã¢ãã¼ã«ããããã«çã¾ããã¨ããçµç·¯ãããã
1å°ã§å®çµããããã«ä½ãããCrawlerãåãã¦ããã
ããã«å¯¾ããInktomiã¯å®å
¨ã«åæ£ãããç°å¢ã§ã¹ã±ã¼ã«ããäºãæå³ãã¦ä½ããã¦ããã
ãã®2ã¤ã®ä¼ç¤¾ã®äºãå¿ã«æ¢ãã¦ãããªãããæ¬é¡ã«å ¥ã£ã¦ããããã
ååçãªCrawler
Crawlerã«ã¤ãã¦é ã追ã£ã¦ãã©ã®ããã«ãã¦ããã¹ããªã®ããèãã¦ã¿ãã
ãã®éç¨ã§Crawlingã¨Scrapingãåãã¦èãã¦ãããªãã¨è¡ããªãã
Crawlingã«é¢ãã¦è¨ãã°ãåæããããåæ¤ç´¢ãµã¤ããä½ãããã®ã§ããã°Scrapingã¯ããã«ã
ã·ã³ãã«ã«æ£è¦è¡¨ç¾ãªããã§ã¿ã°ãã¯ããã
ããã¹ãé¨åã ãã§è»¢ç½®ã¤ã³ããã¯ã¹ãä½ã£ã¦è¡ãã ãã§ã大è¦æ¨¡ã§ãªããã°å®ç¾ã§ããã
ããã«å¯¾ãã¦Scrapingãããå¿
è¦ãããã®ã¯ãã¤ã³ããã¯ã¹ãä½ãããã®ã§ã¯ãªãã
æ§é åããããã¼ã¿ã¨ãã¦ä½¿ãããå ´åã
ã¨ã¯ãããã¨ããããCrawlingã®è©±ãããããã
Crawlingã¨è¨ã£ã¦ããã·ã³ãã«ãªæ¹æ³ããã¾ãã§äººéãã¢ã¯ã»ã¹ãã¦ãããã®ãããªåããããã¨ã
æ§ã
ãªã¬ã¤ã¤ã¼ãããã
HTTPã§ãã¡ã¤ã«ãåå¾ããã
ã¾ãã·ã³ãã«ã«HTTPã§ãªã¯ã¨ã¹ããéããã¡ã¤ã«ãä¿åããäºãèãã¦ã¿ãã
+-------------+ +-----------+ | HTTP Client | -> | HTML File | +-------------+ +-----------+
ãã®ããã«CrawlerãHTTPRequestãéããã·ã³ãã«ã«HTMLããããã¯Jsonãªã©ããã¡ã¤ã«ã«ä¿åããæ¹æ³ã
ãã ãããã§ã¯ãCrawlerã§ã¯ãªããã ã®HTTPClientã§ãããªãã
ãããå®ç¾ããããã«ã¯wgetã¨ããã³ãã³ããããã
å帰çã«åå¾ããã
次ã«å帰çã«åå¾ããå ´åãèãã¦ã¿ãã
+-------------+ +-----------+ +------------+ | HTTP Client | -> | HTML File | -> | html parse | +-------------+ +-----------+ +------------+ ^ v +---------------------------------
- HTTP ClientãHTMLãã¡ã¤ã«ããã¦ã³ãã¼ã
- ãã®HTMLããã¼ã¹
- Aã¿ã°ã®æååã絶対ãã¹(URL)ã«å¤æ
- URLãHTTP Clientã
ã¨ããã«ã¼ããç¹°ãè¿ããã¨ã«ãªãã
ããã¦ããããå®ç¾ããããã«ã¯wgetã¨ããã³ãã³ããããã
- rã¨ãããªãã·ã§ã³ãã¤ãããã¨ã§å¯è½ã
ä¸è¦ãªã¢ã¯ã»ã¹ããªããã
次ã«èããäºã¯ãã©ãããã©ããã¨ããäºã
ä¸è¦ãªã¨ããã«ã¢ã¯ã»ã¹ãã¦ããã¡ã¤ã«ãåå¾ãã¦ãä»æ¹ããªãã®ã§ãå¿
è¦ãªã¨ããã ãã«çµã£ã¦æ¬¡ã®ã¢ã¯ã»ã¹ãããã
+-------------+ +-----------+ +------------+ | HTTP Client | -> | HTML File | -> | html parse | +-------------+ +-----------+ +------------+ ^ +--------+ v +------------- | Filter | ------------------- +--------+
HTMLããã¼ã¹ãã¦ãAã¿ã°ãæãåºãã¨ããã¾ã§ã¯ãã£ãã¨åãã ããã©ãããã®å¾ãHTTP Clientã«è¡ãåã«
Filterãä»ããã¨ã«ããã
ãããããã¨ã§ãä¸è¦ãªã¢ã¯ã»ã¹ããªãããå¹ççã«ã¯ãã¼ãªã³ã°ãããã¨ãå¯è½ã«ãªãã
ããã¦ããããå®ç¾ããããã«ã¯ãwgetã¨ããã³ãã³ãããããããã ãã®ãã£ã«ã¿ãªãã·ã§ã³ãããã
å帰ãã¦ã³ãã¼ãæã®ãã£ã«ã¿: -A, --accept=LIST ãã¦ã³ãã¼ãããæ¡å¼µåãã³ã³ãåºåãã§æå®ãã -R, --reject=LIST ãã¦ã³ãã¼ãããªãæ¡å¼µåãã³ã³ãåºåãã§æå®ãã --accept-regex=REGEX 許容ãã URL ã®æ£è¦è¡¨ç¾ãæå®ãã --reject-regex=REGEX æå¦ãã URL ã®æ£è¦è¡¨ç¾ãæå®ãã --regex-type=TYPE æ£è¦è¡¨ç¾ã®ã¿ã¤ã (posix|pcre) -D, --domains=LIST ãã¦ã³ãã¼ããããã¡ã¤ã³ãã³ã³ãåºåãã§æå®ãã --exclude-domains=LIST ãã¦ã³ãã¼ãããªããã¡ã¤ã³ãã³ã³ãåºåãã§æå®ãã --follow-ftp HTML ææ¸ä¸ã® FTP ãªã³ã¯ãåå¾å¯¾è±¡ã«ãã --follow-tags=LIST åå¾å¯¾è±¡ã«ããã¿ã°åãã³ã³ãåºåãã§æå®ãã --ignore-tags=LIST åå¾å¯¾è±¡ã«ããªãã¿ã°åãã³ã³ãåºåãã§æå®ãã -H, --span-hosts å帰ä¸ã«å¥ã®ãã¹ãããã¦ã³ãã¼ã対象ã«ãã -L, --relative ç¸å¯¾ãªã³ã¯ã ãåå¾å¯¾è±¡ã«ãã -I, --include-directories=LIST åå¾å¯¾è±¡ã«ãããã£ã¬ã¯ããªãæå®ãã --trust-server-names ãã¡ã¤ã«åã¨ãã¦ãªãã¤ã¬ã¯ãå ã®URLã®æå¾ã®é¨åã使ã -X, --exclude-directories=LIST åå¾å¯¾è±¡ã«ããªããã£ã¬ã¯ããªãæå®ãã -np, --no-parent 親ãã£ã¬ã¯ããªãåå¾å¯¾è±¡ã«ããªã
ã¹ã¯ã¬ã¤ãã³ã°ãã
ããã¾ã§ã§ãHTMLãã¡ã¤ã«ãåèµ·çã«åéãããã¨ã¯åºæ¥ãã
次ã¯åå¾ããHTMLããå¿
è¦é¨åãæ½åºãããã¨ã§ããã£ã¨ã¯ãã¼ãªã³ã°ã«æå³ãåºã¦ããã
ãã®HTMLããå¿
è¦é¨åãæ½åºãã¦ãããã¨ããã¹ã¯ã¬ã¤ãã³ã°ãªããã ãã©ãã©ã®ããã«å®æ½ãã¦ããã®ãå¹ççãªã®ã ãããï¼
ããã¯å¤§ãã2ã¤ã®æ¹æ³ãèããããã
- HTMLã¯ã¡ã¢ãªã«è¼ãã¦ãããã¹ã¯ã¬ã¤ãã³ã°å¾ç ´æ£ããã
- HTMLãã¡ã¤ã«ãä¸åº¦ä¿åãããã®å¾ã§ã¹ã¯ã¬ã¤ãã³ã°ããã
- HTMLã¯ãã¡ã¤ã«ã¨ãã¦ä¿åããããã¹ã¯ã¬ã¤ãã³ã°ã®å¾åé¤ãããã¯å§ç¸®ããã
å¾ã«ãªã£ã¦ãã£ã±ãããã®é
ç®ãæ½åºããããªãã¦æãã«ãªã£ãå ´åã¯Crawlingããã¿ã¤ãã³ã°ã§ã®HTMLãå¿
è¦ã«ãªãã
ããä¸åº¦ã¯ãã¼ãªã³ã°ãç´ãã§ãè¯ããããããªãããæç³»åãã¼ã¿ãåéãããå ´åãªããã¯ããã§ã¯ãããªãã
ãã®åã¹ãã¬ã¼ã¸å®¹éã大éã«æ¶è²»ããã¨ããã®ããã¬ã¼ããªãã«ãªããããããã®ã¡ãªããã¨ãã¡ãªããã¨ãã¦åå¨ããã
ããã¯ç¨éã«ä½µãã¦ä½ãã¹ãã¨è¨ãããã¨ããã ããã©ããã¹ãã¬ã¼ã¸ãã¯ã©ã¦ãã«ä»»ããäºã«ãã£ã¦
ãªãã¨ããªããããããªãã
ããã¦å¾ã¯æ½åºå¾ã®ãã¼ã¿ãã©ãã«æ ¼ç´ãããã¨ããäºãèããªãã¨è¡ããªãã
ä»åã¯Crawlerã¨Scrapingã®äºãèããªãã¨è¡ããªãã®ã§ããã¼ã¿ãã©ãã«ä¿åããã®ãã¯
ããã¦ããã
Crawlerãã¹ã±ã¼ã«ãããäºãèãã
次ã«ã¹ã±ã¼ã«ããå ´åã«ã¤ãã¦èãã¦ã¿ãã
ã¨ãããããªã³ã¡ã¢ãªã§ããå ´åã¯ãã¡ã¢ãªä¸ã«ããHTMLãä¿æããã¦ããªãã®ã§ããã·ã³ãããã»ã¹ãã¾ãããã¨ã¯åºæ¥ãªãã¨æã£ãã»ããããã
RDMAãªããã§ãã£ã¦ãããªãäºã¯ãªããããããªäºãèããã»ããããã©ãããã
ã¨ããããã§ã¹ã±ã¼ã«ã®åä½ã¨ãã¦ã¯ä»¥ä¸ã®å³ã®ããã«ãªãã
+-- PROCESS -----------------------------------+ +------+ | +-------------+ +------+ +----------+ | |+----+| | | HTTP Client | -> | HTML | -> | Scraping | |-|| DB || | +-------------+ +------+ +----------+ | |+----+| +----------------------------------------------+ +------+
ãã®ãããªæãã§PROCESSãå¢ãããªãããã·ã³ãå¢ãããªãããã°è¯ãã®ã§ã
ã³ã³ãããªããã¨ã®ç¸æ§ãè¯ãããã ã
ããããããã§èããªãã¨è¡ããªãã®ããHTTP Clienté¨ã¨Scrapingé¨ãéåæã«ãããåæã«ãããã
ä¸ã¤ã®ProcessãHTTPã§ã®éä¿¡ã¨Scapingã®ä¸¡æ¹ãããå ´åãã©ã¡ãã®é度ãåãå ´åã®ã¿ã
éåæã§ãåé¡ã¯ãªãã
ããããHTTPã®éä¿¡é度ã¯å®å®ãããã®ã§ã¯ãªãããHTMLã®ããªã¥ã¼ã ã«ãã£ã¦ã¯Scrapingã®é度ãå®å®ããªãã
並åãéåæã«ããã¡ãªããããªããç´åã®åæå¦çã«ããã®ãè¯ãã
次ã«ãHTMLãä¸åº¦ãã¡ã¤ã«ã«æ¸ãåºãæ¹æ³ã®å ´åã¯ã©ãã ãããã
ããã§ã®åæã¨ãã¦ã¯ããã¡ã¤ã«ã¯ãã¼ã«ã«ã®ã¹ãã¬ã¼ã¸ã§ã¯ãªããã¯ã©ã¦ãä¸ã®ObjectStorageã«ä¿åãããã®ã¨ããã
ãã®å ´åã®ã¹ã±ã¼ã«ã¯ä¸ã®å³ã®ããã«ãªãã
+---------------+ +--------+ +-------------+ |+-------------+| |+------+| |+----------+ | || HTTP Client ||->|| HTML ||->|| Scraping | | |+-------------+| |+------+| |+----------+ | +---------------+ +--------+ +-------------+
HTTP Clientã¨Scrapingé¨ãå®å
¨ã«åãé¢ããã¦ããã
ããã«ãã£ã¦ãHTTP Clientã¨Scrapingã®Processãåé¢ãããã¨ãå¯è½ã«ãªã£ã¦ããã
HTMLã®ãã¡ã¤ã«ãåå¾ããããã®IOã³ã¹ããããããHTTP Clientã®HTTPéä¿¡ã®ã³ã¹ãããã
ä½ãã³ã¹ãã§ãã確çã¯é«ãã(Scrapingã®ããã»ã¹ãObjectStrageã¨åä¸ã¯ã©ã¦ãã«åå¨ããå ´åã)
ãããããã®å ´åå帰çãªCrawlingãããæã«Scrapingãçµããã¾ã§ã次ã®ãã¼ã¸ã®åå¾ãå§ã¾ããªãã
ããã§ã¯ãã¾ãã¹ã±ã¼ãªã³ã°ã®ã¡ãªããã享ååºæ¥ãªãå¯è½æ§ãé«ãã
ãªã®ã§ããã®æ§é ããå°ãæ¹è¯ããã¦ãå帰çãªã¯ãã¼ãªã³ã°ãå¹ççã«è¡ãããã«ããã
ãªã³ã¯ããã©ãããã«HTMLã®ParserãHttp Clientå
é¨ã«æã¡ãCrawlingã ããå
ã«é²ãã¦ãã
Scrapingãéåæã«åããã¨ããæ¹æ³ã ä¸ã®å³ã®ããã«ãªãã
+---------------+ +--------+ +-------------+ |+-------------+| |+------+| |+----------+ | || HTTP Client ||->|| HTML ||->|| Scraping | | |+-------------+| |+------+| |+----------+ | | ^ V | +--------+ +-------------+ |+-------------+| || HTML Parser || |+-------------+| +---------------+
ããã«ãã£ã¦ãHTTPClientã¨Scrapingãå®å
¨ã«åé¢åºæ¥ã¦ã¯ããããé常ã«ç¡é§ã®å¤ãäºã¯ããã«åããã¨æãã
HTTP Clienté¨ã¨Scrapingé¨ã§ã2åHTML Parserãåããã¨ã«ãªãããã ã
ããã§è¨ãParserã¨è¨ãã®ã¯ããã¡ããªãHTMLã綺éºãªHTMLã«ãã¦DomParserããããªãèªã¿è¾¼ããå½¢ã«ãããã¨ãããã
å
·ä½çã«ã¯ãHTMLã®æ´å½¢ã¨æåã³ã¼ãã®å¤æã«ãªãã
ãã®ç¡é§ã«å¯¾ãã¦ã®ã¢ããã¼ãã¨ãã¦ã¯ãé常ã«ã·ã³ãã«ã«è§£æ±ºã§ããã
ParseãããHTMLãä¿åãã¦ããã°ããã
+---------------+ |+-------------+| || HTTP Client || |+-------------+| | ^ V | +---------------+ +-------------+ |+-------------+| |+-------------+| |+----------+ | || HTML Parser ||->|| Parsed HTML ||->|| Scraping | | |+-------------+| |+-------------+| |+----------+ | +---------------+ +---------------+ +-------------+
ããã§ããã£ãã®wgetã§ãã£ã¦ãããç¡é§ãªã¢ã¯ã»ã¹ãæ¸ããåããå ãã¦ããããã
ããã¾ã§ã®æ§æã ã¨ãHTMLãParseãããã®ã¾ã¾HTTP Clienté¨ã«æ¸¡ãã¦ããã®ã§ã
éã«Filterãæãã°è¯ãã ããã
ããã«ãã£ã¦ãç¡é§ãªã¢ã¯ã»ã¹ãçç¥ã§ããããã«ãªã£ã¦ããã
ããã¾ã§æ¥ãã¨ãä»åº¦ã¯ãã®Parserããéåæåããããªã£ã¦ããã
+---------------+ |+-------------+| || HTTP Client || |+-------------+| +---^-------v---+ | Queue | Queue | +---^-------v---+ |+--^---+ v | ||Filter| v | |+--^---+ v | +---^-------v---+ +---------------+ +-------------+ |+--^-------v--+| |+-------------+| |+----------+ | || HTML Parser ||->|| Parsed HTML ||->|| Scraping | | |+-------------+| |+-------------+| |+----------+ | +---------------+ +---------------+ +-------------+
HTTP Clientã¨Parserã®éãQueueã§ã¤ãªããFilterãéãããã®ãQueueãéãã¦HTTP Clientã«æ»ãå½¢ã«ããã
ããã¾ã§æ¥ãã¨åã®è¯ã人ã¯æ°ã¥ãã¦ããããç¥ããªãããã©ã
Scraperã®æºåãããåã«ãCrawlingã ãéå§ãããã¨ãã§ããã
Parsed HTMLã¯ObjectStorageä¸ã«ä¿ç®¡ããã¦ããã®ã§ãå®ç¹è¦³æ¸¬çã«ä½¿ãå ´åã«ã¯ããã«ã§ã
ãã¼ã¿ãåéãã¦ãããã¨ãå¯è½ã ã
ããã¦ããã®æ§é ã«ããã¨ããä¸ã¤ã¡ãªãããããã
Scrapingããã¦ãã人ãªãããããã¨æãããã©ãXPATHã§æãã«ããæ£è¦è¡¨ç¾ã§æãã«ãã
ä½åº¦ã試è¡é¯èª¤ããããã¨ãå¤ãã¨æãã
ãã®ãã³ã«ãµã¤ãã«HTMLãåå¾ãã«ãã£ã¦ããªãã ãããï¼
ããã¤ã³ã¡ã¢ãªã§ãã£ã¦ãããã確å®ã«HTMLãä½åº¦ãåå¾ãã«ãã£ã¦ããã ããã
ãã®æ§é ã«ãªããã¨ã§ãä¸åº¦HTMLãåéãã¦ããã°ãä½åº¦ã§ã試è¡é¯èª¤ãæ¾é¡ã«ãªãã
Storageã¨Scrapingã®é¢ä¿ã
æå¾ã«Storageã¨Scrapingã«ã¤ãã¦ããå°ãæ·±ãæãä¸ãã¦ããããã
ãããScrapingãã¹ããªã¼ã å¦çã®ããã«ãCrawlingãã¦ãããã°ãããã£ã¦ããããå ´åã¯
Storageã«ä¿åããããã¨ã«Hookãããäºãã§ãããµã¼ãã¹ãããã®ã§ãéæScrapingãéå§ãããã¨ãå¯è½ã ã
Scrapingãã¹ããªã¼ã å¦çããå¿
è¦ããªãå ´åã¯æ´ã«èªç±åº¦ãã¾ãã
å¿
è¦ããªãã¦ãã¹ããªã¼ã å¦çãã¦ãè¯ãããèç©ãããParsedHTMLã«å¯¾ãã¦ä¸æ°ã«Scrapingãããã¨ãå¯è½ã«ãªãã
ãã®å ´åã¯ãæªå¦çã®Scrapingéã«ä½µãã¦Processã®æ°ãå¢æ¸ããã¦è¡ãã°ããã
Scrapingãããªãã¦ããæã¯ãScrapingã®Processãã¹ã¦ãåæ¢ãã¦ããã°è¯ãã®ã§ã
ã¯ã©ã¦ãä¸ã®ã³ã³ãã¥ã¼ãã£ã³ã°ãªã½ã¼ã¹ã使ãå ´åã³ã¹ãã¡ãªãããåºã¦ããã
StorageãHDFSãªããã ã£ããããããHadoopã§ä¸æ°ã«Scrapingããäºãå¯è½ã«ãªã£ããããã¦ããã
ä¾ãã°ã
SELECT `span.name`, `span.price` FROM `STORAGEPREFIX.div#listtable ul li `
ãªãã¦äºãå¯è½ã«
ã¾ããStorageã«HTMLãä¿åããScrapingãåé¢ãããã¨ã«ãã£ã¦ãã¼ã¿æ´»ç¨ã®ã¿ã¤ãã³ã°ããããäºãã§ããã®ã§ã
ã¤ã³ã¿ã¼ãããä¸ã®çµ±è¨çãªåæã«ã¯ç¡é§ãªã³ã³ãã¥ã¼ãã£ã³ã°ãªã½ã¼ã¹ã使ãäºãªããæ©ãããããäºãå¯è½ã«ãªãã
åå¹´åã®ååã¨ãè¦ããæãªããã«ã¯å¹ççã ã
ã¾ã¨ã
ããã¾ã§ãã¯ãã¼ãªã³ã°ã«ã¤ãã¦ã©ã®ãããªã¢ã¼ããã¯ãã£ã«ãã¦ããã®ãè¯ããèãã¦ããäºãããã¼ã¨æ¸ãã¦ã¿ãããã©ãçµæã©ããããã¨ããã¨ãCrawlingé¨ã¨Scrapingé¨ãåããã
ããã«ãã£ã¦ããã¼ã¿ã®ä½¿ãåããããããã«ãªã£ããã¨ã¨ãã¯ãã¼ãªã³ã°ã ããå
ã«å§ãããã¨ãã§ããäºã«ãã£ã¦ããããããã¨ãå®ç¾ããã«ããã£ã¦ã
æ
å ±ã®åãéããæ¸ãããã¨ãå¯è½ã«ãªã£ãã
Storageã³ã¹ãã¯ãããããããã¯å§ç¸®ãããªãã³ã¼ã«ãã¹ãã¬ã¼ã¸ã«è½ã¨ããªããæé©åã®æ¹æ³ãå°½ããããã§ã¯ãªãã
ã¨ããããã§ãçµå±Microserviceã®ãããªå½¢ã«è½ã¡çããã
ã§ãåé ã«åºã¦ãã2ã¤ã®ä¼ç¤¾ã ããã©ããç¹ã«æå³ã¯ãªãæå³æ·±ãªæãã«ãããã£ãã ãã§ããã