SRE(Site Reliability Engineering)ãã¼ã ã®@cubicdaiyaã§ããä»å¹´ã®ã¯ããããéçºãã¦ããWidebulletã¨ããã·ã³ãã«ãªAPI Gatewayãç´¹ä»ãã¾ãã
WidebulletãAPI Gateway with JSON-RPCã
Widebulletã¯JSON-RPCããã¼ã¹ã«ããã·ã³ãã«ãªAPI Gatewayã§ããGoã§æ¸ããã¦ãã¾ãã
JSON-RPCã¯JSONã«ããRPC(Remote Procedure Call)ãããã³ã«ã§ããªã¯ã¨ã¹ããã¬ã¹ãã³ã¹ã®ããã£ã«å«ã¾ããJSONãå©ç¨ãã¦ã¯ã©ã¤ã¢ã³ã/ãµã¼ãéã®éä¿¡ãè¡ãã¾ãã
# ãªã¯ã¨ã¹ããã㣠{ "jsonrpc": "2.0", "method": "echo", "params": {"msg": "ok"}, "id": "1"} # ã¬ã¹ãã³ã¹ãã㣠{"jsonrpc": "2.0", "result": "ok", "id": "1"}
Widebulletã¯ãã®JSON-RPCããã¼ã¹ã«å°ãæ¡å¼µãããããã³ã«ãç¨ãã¦RESTful APIãµã¼ãã®ããã®ã²ã¼ãã¦ã§ã¤ã¨ãã¦åä½ãã¾ãã以ä¸ã¯Widebulletãåä¿¡å¯è½ãªãªã¯ã¨ã¹ãããã£ã®ä¾ã§ãã
[ { "jsonrpc": "2.0", "ep": "ep-1", "method": "/user/get", "params": { "user_id": 1 }, "id": "1" }, { "jsonrpc": "2.0", "ep": "ep-1", "method": "/item/get", "params": { "item_id": 2 }, "id": "2" } ]
è¨å®ã«ãä¾ãã¾ãããWidebulletã¯ãã®ãªã¯ã¨ã¹ãããã£ãè§£æãã¦ä»¥ä¸ã®URLã«å¯¾ãã¦GETãªã¯ã¨ã¹ããå®è¡ãã¾ããï¼ãã®ä¾ã§ã¯GETã®ã¿ã§ãããWidebulletã¯POSTããµãã¼ããã¦ãã¾ãã詳ããã¯mercari/widebullet/SPEC.mdãã覧ä¸ãããï¼
http://ep-1/user/get?user_id=1
http://ep-1/item/get?item_id=2
åãªã¯ã¨ã¹ãã¯ã´ã«ã¼ãã³ã«ãã£ã¦ä¸¦è¡ãã¦å®è¡ãããã®ããã½ã§ããWidebulletã¨éä¿¡ããã¯ã©ã¤ã¢ã³ãã¯åä¸ã®HTTPãªã¯ã¨ã¹ããçºè¡ããã ãã§ããã¯ã¨ã³ãã®RESTful APIãµã¼ãã«å¯¾ãã¦è¤æ°ã®APIãªã¯ã¨ã¹ããåæã«çºè¡ãããã¨ãã§ãã¾ãã
Widebulletã¨ã¡ã«ã«ãªAPI
ã¡ã«ã«ãªã«ã¯ãµã¼ãã¹å½åãã稼åãã¦ããAPIãµã¼ããããã¾ããããã¯PHPã§æ¸ããããããªãã®è¦æ¨¡ãããã³ã¼ããã¼ã¹ã§ãã¡ã«ã«ãªã®ã³ã¢æ©è½ãéç´ããããã®ã§ãããã¾ãã以åã¯APIã¸ã®ãªã¯ã¨ã¹ãã¯ã¢ããªããçºè¡ãããã ãã§ããããç¾å¨ã¯ã¡ã«ã«ãªã®å é¨ãããã¯ã¼ã¯å ã«ããåãµãã·ã¹ãã ãããé£ãã§ããããã«ãªã£ã¦ãã¾ããï¼ãã¹ã¦ã®APIãªã¯ã¨ã¹ãã¯nginxã§ãã¼ããã©ã³ã¹ããã¦ãã¾ããï¼
ãã®ããã«åãµãã·ã¹ãã ã¯APIãµã¼ãã«å¯¾ãã¦HTTPï¼ãããã¯HTTPSï¼ãªã¯ã¨ã¹ããçºè¡ããã ãã§ã¡ã«ã«ãªã®ã³ã¢æ©è½ãå©ç¨ãããã¨ãã§ããã³ã¼ãã®åå©ç¨æ§ãããã°ã©ãã®çç£æ§ã®åä¸ã«ãã¤ãªããã¾ãã
䏿¹ã§ãµãã·ã¹ãã ãAPIãå©ç¨ããéãããã©ã¼ãã³ã¹ãåºãããã«åæã«è¤æ°ã®APIã«å¯¾ãã¦HTTPãªã¯ã¨ã¹ããçºè¡ããªããã°ãªããªãã±ã¼ã¹ãå°ãªãããã¾ããã§ããããã®éãè¨èªã«ãã£ã¦ã¯HTTPãªã¯ã¨ã¹ãã®ä¸¦è¡å®è¡ãå°ã é¢åãªã®ã§ãã®é¨åãWidebulletãè©ä»£ããããã¨ããããã§ãã
å½åã¯lua-resty-jsonrpc-batchã¿ããã«ngx_luaãå©ç¨ãããã¨ãèãã¾ããããããã«ã¦ã§ã¢ã®æ§è³ªä¸ãµãã·ã¹ãã ããAPIãå©ãã¨ã³ã¸ãã¢ã®éçºç°å¢ã«ãã¤ã³ã¹ãã¼ã«ããã®ã§é å¸ãç°¡åãªGoã§éçºãã¦ãã¾ããä»ã®ã¨ããWidebulletã¯ã¡ã«ã«ãªã®æ¯è¼çå°ããªãµãã·ã¹ãã ã§ç¨¼åãã¦ããã®ã¿ã§ãããç¹ã«åé¡ããªãå®å®ãã¦åãã¦ãã¾ãã
ã¡ã«ã«ãªAPIã¨å ±éæè¡åºç¤
ã¨ããã§ããªãã§ãããã§ãåä¸ã®APIãµã¼ãã«æ©è½ãéç´ãã¦ãã¾ãã¨çµæçã«ã¢ããªã·ãã¯ãªã·ã¹ãã ãåºæ¥ä¸ãã£ã¦ãã¾ããéçºã¹ãã¼ããã³ã¼ããã¼ã¹ã®ã¡ã³ããã³ã¹æ§ã«å¤§ããªå½±é¿ãåºã¦ãããã¨ããããæ¨å¹´é ããã¯ãµã¼ãã¹å½åããããAPIãµã¼ãã«æ©è½ãè©°ãè¾¼ãã®ã§ã¯ãªããç°ãªãã·ã¹ãã ã§ãå ±éãã¦å©ç¨ã§ããããåºç¤ã½ããã¦ã§ã¢ã¹ã¿ãã¯ã¨ãã¦åãåºãåããåºã¦ãã¦ãã¾ãããã§ã«æ¬ããã°ã§ç´¹ä»ãã¦ãããã®ã ã¨ã
ãããã¾ããæè¿ã®æ°ããäºä¾ã ã¨GRPCãå©ç¨ããå ±éIDåºç¤ã稼åãéå§ãã¦ãããä»å¾ããããã£ãæµãã¯ç¶ãã§ããããã¾ããå ±éåºç¤ã¨ãªãã·ã¹ãã ã¯ããã©ã¼ãã³ã¹ãã¹ã±ã¼ã©ããªãã£ãéè¦ãã¦ããã¨ããGoãOpenRestyï¼ngx_luaï¼ãé¸ã°ããå¾åãããã¾ãã
ã¡ã«ã«ãªã®ããã¯ã¨ã³ããæ¯ããSREãåéä¸ã§ã
ã¡ã«ã«ãªã§ã¯å ±éã®ã½ããã¦ã§ã¢åºç¤ã¨ãªãããã¯ã¨ã³ãã®éçºãéç¨ãè¡ãSREãåéãã¦ãã¾ããSREãã¼ã ã®å½¹å²ã¯ç¯å²ãåºãã§ããã大ã¾ãã«ããã¤ãåæããã¨ä»¥ä¸ã®ãããªãã®ã§ãã
- ã·ã¹ãã ã®ããã©ã¼ãã³ã¹ãä¿¡é ¼æ§ãã¹ã±ã¼ã©ããªãã£ãåä¸ãããããã®ã½ããã¦ã§ã¢ã®éçºã¨éç¨
- ã·ã¹ãã ä¸ã®æè¡çãªåé¡ã課é¡ã®çºè¦ã¨è§£æ±ºãããã¦ãã®ããã®ã½ããã¦ã§ã¢éçº
- ãµã¼ãã»ãããã¯ã¼ã¯ã®æ§ç¯ã»éç¨ãã·ã¹ãã ã®èªååãé害対å¿ãªã©ã®ã·ã¹ãã 管çè çãªæ¥å
èå³ã®ããæ¹ã¯ãã¨ã³ã¸ãã¢ï¼Site Reliability Engineeringï¼ | æ ªå¼ä¼ç¤¾ã¡ã«ã«ãªããããå¿åãã ããã