{"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8","forks_url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/forks","commits_url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/commits","id":"18760df2d7b4000bd889fa393aee91b8","node_id":"MDQ6R2lzdDE4NzYwZGYyZDdiNDAwMGJkODg5ZmEzOTNhZWU5MWI4","git_pull_url":"https://gist.github.com/18760df2d7b4000bd889fa393aee91b8.git","git_push_url":"https://gist.github.com/18760df2d7b4000bd889fa393aee91b8.git","html_url":"https://gist.github.com/michaellihs/18760df2d7b4000bd889fa393aee91b8","files":{"devops-days-kiel-messaging.md":{"filename":"devops-days-kiel-messaging.md","type":"text/markdown","language":"Markdown","raw_url":"https://gist.githubusercontent.com/michaellihs/18760df2d7b4000bd889fa393aee91b8/raw/d0d2bfdf7549994c1a15c7ad8570835ccd23b7ee/devops-days-kiel-messaging.md","size":4489,"truncated":false,"content":"DevOps Days Kiel: Message Queues as an Integration Approach for Micro Services\n==============================================================================\n\nMicro Services seem to be a trendy topic in software development nowadays and often they go hand in hand with message queues as an integration approach. So the question arises, whether message queues become the replacement for relational databases as an integration scenario and whether it is a better approach or not.\n\nSo here are some questions:\n\n### Are you using message queues in your (micro service) projects?\n\n* Yes, for emails --> RabbitMQ, 10,000 requests / seconds\n\n### Which vendor(s) do you use\n\n* RabbitMQ\n* Kafka\n* See ELK Stack for high load scenarios --> distribution to multiple queues\n\n### What are your use cases (event driven application, asynchronous requests...)\n\n* distribute work on several workers\n* moved from ActiceMQ to kafka\n\n### Are you planning for an outage of the queue(s)\n\n* DB (e.g. Redis) as a cache before the queue\n\n### What form of message persistence do you use\n\n* doesn't matter if messages are lost\n* RabbitMQ provides persistence to disk\n* persistence brings a performance penalty\n\n### Are you using your queues in a distributed setup / what about reliability / througput / scalability\n\n* Kafka --> seems to perform very well\n* Kafka as a replacement for ActiveMQ and Redis (in a Elkstack scenario)\n\n### If you are using message queues in a cloud environment: are you using shared or dedicated services - what is your experience with either\n\n* Amazon Queue SQS --> not reliable but cheap\n\n### Do you somehow implement transactionality across multiple operations\n\n* Using an error queue --> retrying\n* Saga pattern...\n* Think about your architecture --> bounded context --> \"self contained system\" Stefan Tilkow, Eberhard Wolf\n* [Domain Driven Design](http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215) by [Eric Evans](https://twitter.com/ericevans0?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor) \n\n### Do you have any metrics for scaling up and down services based on the load of the message queue\n\n* Measure delays between read and write in the queue\n* Track time when message is written and read --> scale based upon this information\n\n### What message formats do you use (JSON, binary, ...)\n\n* JSON\n* Kafka can compress messages\n\n### Apache Kafka vs. RabbitMQ / Message Queues\n\n* [Old post on Quora](https://www.quora.com/What-are-the-differences-between-Apache-Kafka-and-RabbitMQ)\n* [Kafka vs. RabbitMQ vs. Kestrel vs. ActiveMQ](https://dzone.com/articles/exploring-message-brokers)\n* [Performance Comparison of several messaging queues](http://www.warski.org/blog/2014/07/evaluating-persistent-replicated-message-queues/)\n* [Performance overview of RabbitMQ given different ACKs](http://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/)\n* [Discussion about downsides of Kafka](https://gist.github.com/markrendle/26e423b6597685757732)\n* [Loooong discussion about RabbitMQ vs. Kafka](http://grokbase.com/t/kafka/users/13660rh02e/arguments-for-kafka-over-rabbitmq)\n\nSome facts from various sources (no guarantees)\n\n| Feature | RabbitMQ | Kafka  |\n| ------  | ------ | ----- |\n|  Messages/s | 20k/s  | 200k/s write, 3M/s read |\n|  Routing capabilities   | Advanced, see https://www.rabbitmq.com/getstarted.html | topic-like exchange only |\n|  Acknowledgemts | message acknowledgement to assure delivery state | consumer needs to remember delivery state (e.g. via Zookeeper) |\n\n![RabbitMQ vs. Kafka table 1](http://1.bp.blogspot.com/-m2_ZjQpfKm0/U95yozpiwdI/AAAAAAAAAGw/jIgYftZegeM/s1600/rsz_screenshot_from_2014-08-03_21_05_32.png)\n![RabbitMQ vs. Kafka table 2](http://4.bp.blogspot.com/-KtEVUEsAe7U/U95yu05IO2I/AAAAAAAAAG4/T7gxS9xDH1I/s1600/rsz_screenshot_from_2014-08-03_21_05_49.png)\n\n### Any recommendatations for books, source code, resources...\n* [RabbitMQ Tutorials](https://www.rabbitmq.com/getstarted.html)\n* [Design Decisions for RabbitMQ Applications](http://derickbailey.com/2015/09/02/rabbitmq-best-practices-for-designing-exchanges-queues-and-bindings/)\n* [Rabbit MQ Books](https://leanpub.com/rabbitmq-structures-and-layout)\n\n### Monotlith vs. Micro services\n* start with a Monotlith and split it up later (unless you know the domain very well - eg. in a e-commerce shop)\n* see [Domain Driven Design by Eric Evans](http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215)","encoding":"utf-8"}},"public":true,"created_at":"2016-05-12T13:22:27Z","updated_at":"2022-11-26T16:57:29Z","description":"DevOps Days Kiel: Message Queues as an Integration Approach for Micro Services","comments":0,"user":null,"comments_enabled":true,"comments_url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/comments","owner":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"forks":[{"url":"https://api.github.com/gists/6cc2773da0864b3d12eacbb114576ed5","user":{"login":"galtys","id":5654881,"node_id":"MDQ6VXNlcjU2NTQ4ODE=","avatar_url":"https://avatars.githubusercontent.com/u/5654881?v=4","gravatar_id":"","url":"https://api.github.com/users/galtys","html_url":"https://github.com/galtys","followers_url":"https://api.github.com/users/galtys/followers","following_url":"https://api.github.com/users/galtys/following{/other_user}","gists_url":"https://api.github.com/users/galtys/gists{/gist_id}","starred_url":"https://api.github.com/users/galtys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/galtys/subscriptions","organizations_url":"https://api.github.com/users/galtys/orgs","repos_url":"https://api.github.com/users/galtys/repos","events_url":"https://api.github.com/users/galtys/events{/privacy}","received_events_url":"https://api.github.com/users/galtys/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Jan Troler","company":"Galtys Ltd.","blog":"galtys.com","location":"London, United Kingdom","email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":159,"public_gists":6,"followers":1,"following":0,"created_at":"2013-10-10T10:26:04Z","updated_at":"2026-03-30T09:17:55Z"},"id":"6cc2773da0864b3d12eacbb114576ed5","created_at":"2018-09-26T13:05:18Z","updated_at":"2018-09-26T13:05:18Z"}],"history":[{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"99a943fcbe4f59ff5149788bb6a6034cca35b5d8","committed_at":"2016-05-19T12:58:21Z","change_status":{"total":1,"additions":1,"deletions":0},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/99a943fcbe4f59ff5149788bb6a6034cca35b5d8"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"084bd069b201086d90c48a1c93683922b727bc1e","committed_at":"2016-05-12T22:46:15Z","change_status":{"total":3,"additions":2,"deletions":1},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/084bd069b201086d90c48a1c93683922b727bc1e"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"9a225db4165ec0920ddfd45179282b7513af4244","committed_at":"2016-05-12T22:41:06Z","change_status":{"total":1,"additions":1,"deletions":0},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/9a225db4165ec0920ddfd45179282b7513af4244"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"22f6cde81614c878c3ec30a6f78f020dcb070ab8","committed_at":"2016-05-12T22:39:44Z","change_status":{"total":0,"additions":0,"deletions":0},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/22f6cde81614c878c3ec30a6f78f020dcb070ab8"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"353da63fad2695fed4bbb3f58c2ce65a55ac18f7","committed_at":"2016-05-12T22:39:14Z","change_status":{"total":2,"additions":1,"deletions":1},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/353da63fad2695fed4bbb3f58c2ce65a55ac18f7"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"e0daa35d0821ba9ca28f152a6463898c77958d4e","committed_at":"2016-05-12T22:39:01Z","change_status":{"total":1,"additions":1,"deletions":0},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/e0daa35d0821ba9ca28f152a6463898c77958d4e"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"546888a528c37110759f720f9b5e724a31a38848","committed_at":"2016-05-12T22:34:22Z","change_status":{"total":6,"additions":4,"deletions":2},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/546888a528c37110759f720f9b5e724a31a38848"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"f452b5559104c2f3eb93e60a66fbc53c640fed5e","committed_at":"2016-05-12T22:30:04Z","change_status":{"total":3,"additions":3,"deletions":0},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/f452b5559104c2f3eb93e60a66fbc53c640fed5e"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"5104fb4dc95ab43a0d46525798909819fb3f3f80","committed_at":"2016-05-12T22:25:27Z","change_status":{"total":13,"additions":13,"deletions":0},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/5104fb4dc95ab43a0d46525798909819fb3f3f80"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"e44c1f118aee102b0d04acdebc402faba5bb3aad","committed_at":"2016-05-12T16:05:59Z","change_status":{"total":59,"additions":38,"deletions":21},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/e44c1f118aee102b0d04acdebc402faba5bb3aad"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"359e337631971af978d55c0ad7580e9caae685ee","committed_at":"2016-05-12T15:21:09Z","change_status":{},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/359e337631971af978d55c0ad7580e9caae685ee"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"19ae172e2491d4b2b83784c8b694d25c7d1eecee","committed_at":"2016-05-12T15:18:24Z","change_status":{},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/19ae172e2491d4b2b83784c8b694d25c7d1eecee"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"1bd73fa8a68385d919812e604e345e0203d2aed9","committed_at":"2016-05-12T13:48:06Z","change_status":{},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/1bd73fa8a68385d919812e604e345e0203d2aed9"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"a4a6153ffdf8b3dda6547e6cb75b12f826978071","committed_at":"2016-05-12T13:47:24Z","change_status":{},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/a4a6153ffdf8b3dda6547e6cb75b12f826978071"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"554e312d0ff3ee21d07e7b0377de2f34a23edeca","committed_at":"2016-05-12T13:24:39Z","change_status":{},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/554e312d0ff3ee21d07e7b0377de2f34a23edeca"},{"user":{"login":"michaellihs","id":575011,"node_id":"MDQ6VXNlcjU3NTAxMQ==","avatar_url":"https://avatars.githubusercontent.com/u/575011?v=4","gravatar_id":"","url":"https://api.github.com/users/michaellihs","html_url":"https://github.com/michaellihs","followers_url":"https://api.github.com/users/michaellihs/followers","following_url":"https://api.github.com/users/michaellihs/following{/other_user}","gists_url":"https://api.github.com/users/michaellihs/gists{/gist_id}","starred_url":"https://api.github.com/users/michaellihs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaellihs/subscriptions","organizations_url":"https://api.github.com/users/michaellihs/orgs","repos_url":"https://api.github.com/users/michaellihs/repos","events_url":"https://api.github.com/users/michaellihs/events{/privacy}","received_events_url":"https://api.github.com/users/michaellihs/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"7aad559a5d5a77595ec3bfacc93dc8ddce61bf29","committed_at":"2016-05-12T13:22:27Z","change_status":{},"url":"https://api.github.com/gists/18760df2d7b4000bd889fa393aee91b8/7aad559a5d5a77595ec3bfacc93dc8ddce61bf29"}],"truncated":false}