{"action":"created","comment":{"url":"https://api.github.com/repos/grpc/grpc.github.io/pulls/comments/171003155","pull_request_review_id":99779251,"id":171003155,"diff_hunk":"@@ -0,0 +1,395 @@\n+---\n+layout: post\n+title: Optimizing gRPC - Part 1\n+published: false\n+permalink: blog/optimizing-grpc-part-1\n+author: Carl Mastrangelo\n+company: Google\n+company-link: https://www.google.com\n+---\n+\n+# Optimizing gRPC - Part 1\n+\n+A common question with gRPC is how to make it fast.  The gRPC library offers users access to high\n+performance RPCs, but it isn't always clear how to achieve this.  Because this question is common \n+enough I thought I would try to show my thought process when tuning programs.\n+\n+## Setup\n+\n+Consider a basic Key Value service that is used by multiple other programs.  The service needs to\n+be safe for concurrent access in case updates happen at the same time.  It needs to be able to scale\n+up to use the available hardware.   Lastly, it needs to be fast.  gRPC is a perfect fit for this\n+kind of service, so let's use it as our starting point.","path":"_posts/2018-02-27-optimizing-grpc-part-1.md","position":22,"original_position":22,"commit_id":"f04eada3bd86b91d5767786c08df18e4f318216f","original_commit_id":"f04eada3bd86b91d5767786c08df18e4f318216f","user":{"login":"LisaFC","id":10744406,"avatar_url":"https://avatars3.githubusercontent.com/u/10744406?v=4","gravatar_id":"","url":"https://api.github.com/users/LisaFC","html_url":"https://github.com/LisaFC","followers_url":"https://api.github.com/users/LisaFC/followers","following_url":"https://api.github.com/users/LisaFC/following{/other_user}","gists_url":"https://api.github.com/users/LisaFC/gists{/gist_id}","starred_url":"https://api.github.com/users/LisaFC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LisaFC/subscriptions","organizations_url":"https://api.github.com/users/LisaFC/orgs","repos_url":"https://api.github.com/users/LisaFC/repos","events_url":"https://api.github.com/users/LisaFC/events{/privacy}","received_events_url":"https://api.github.com/users/LisaFC/received_events","type":"User","site_admin":false},"body":"This sentence is a bit odd - we're writing a blog post about optimizing a gRPC service, so why would we choose anything else?  How about just \"gRPC is a perfect fit for this type of service; now let's look at the best way to implement it.\"","created_at":"2018-02-27T17:30:46Z","updated_at":"2018-02-27T17:54:31Z","html_url":"https://github.com/grpc/grpc.github.io/pull/634#discussion_r171003155","pull_request_url":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/grpc/grpc.github.io/pulls/comments/171003155"},"html":{"href":"https://github.com/grpc/grpc.github.io/pull/634#discussion_r171003155"},"pull_request":{"href":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634"}}},"pull_request":{"url":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634","id":171525438,"html_url":"https://github.com/grpc/grpc.github.io/pull/634","diff_url":"https://github.com/grpc/grpc.github.io/pull/634.diff","patch_url":"https://github.com/grpc/grpc.github.io/pull/634.patch","issue_url":"https://api.github.com/repos/grpc/grpc.github.io/issues/634","number":634,"state":"open","locked":false,"title":"Optimization blog post","user":{"login":"carl-mastrangelo","id":8943572,"avatar_url":"https://avatars0.githubusercontent.com/u/8943572?v=4","gravatar_id":"","url":"https://api.github.com/users/carl-mastrangelo","html_url":"https://github.com/carl-mastrangelo","followers_url":"https://api.github.com/users/carl-mastrangelo/followers","following_url":"https://api.github.com/users/carl-mastrangelo/following{/other_user}","gists_url":"https://api.github.com/users/carl-mastrangelo/gists{/gist_id}","starred_url":"https://api.github.com/users/carl-mastrangelo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carl-mastrangelo/subscriptions","organizations_url":"https://api.github.com/users/carl-mastrangelo/orgs","repos_url":"https://api.github.com/users/carl-mastrangelo/repos","events_url":"https://api.github.com/users/carl-mastrangelo/events{/privacy}","received_events_url":"https://api.github.com/users/carl-mastrangelo/received_events","type":"User","site_admin":false},"body":"@hsaliak @LisaFC ","created_at":"2018-02-26T23:50:37Z","updated_at":"2018-02-27T17:54:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"05bc6d667d3cbb5f62e85c6cdae5a5800e0bad24","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634/commits","review_comments_url":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634/comments","review_comment_url":"https://api.github.com/repos/grpc/grpc.github.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/grpc/grpc.github.io/issues/634/comments","statuses_url":"https://api.github.com/repos/grpc/grpc.github.io/statuses/f04eada3bd86b91d5767786c08df18e4f318216f","head":{"label":"carl-mastrangelo:optim","ref":"optim","sha":"f04eada3bd86b91d5767786c08df18e4f318216f","user":{"login":"carl-mastrangelo","id":8943572,"avatar_url":"https://avatars0.githubusercontent.com/u/8943572?v=4","gravatar_id":"","url":"https://api.github.com/users/carl-mastrangelo","html_url":"https://github.com/carl-mastrangelo","followers_url":"https://api.github.com/users/carl-mastrangelo/followers","following_url":"https://api.github.com/users/carl-mastrangelo/following{/other_user}","gists_url":"https://api.github.com/users/carl-mastrangelo/gists{/gist_id}","starred_url":"https://api.github.com/users/carl-mastrangelo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carl-mastrangelo/subscriptions","organizations_url":"https://api.github.com/users/carl-mastrangelo/orgs","repos_url":"https://api.github.com/users/carl-mastrangelo/repos","events_url":"https://api.github.com/users/carl-mastrangelo/events{/privacy}","received_events_url":"https://api.github.com/users/carl-mastrangelo/received_events","type":"User","site_admin":false},"repo":{"id":74154598,"name":"grpc.github.io","full_name":"carl-mastrangelo/grpc.github.io","owner":{"login":"carl-mastrangelo","id":8943572,"avatar_url":"https://avatars0.githubusercontent.com/u/8943572?v=4","gravatar_id":"","url":"https://api.github.com/users/carl-mastrangelo","html_url":"https://github.com/carl-mastrangelo","followers_url":"https://api.github.com/users/carl-mastrangelo/followers","following_url":"https://api.github.com/users/carl-mastrangelo/following{/other_user}","gists_url":"https://api.github.com/users/carl-mastrangelo/gists{/gist_id}","starred_url":"https://api.github.com/users/carl-mastrangelo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/carl-mastrangelo/subscriptions","organizations_url":"https://api.github.com/users/carl-mastrangelo/orgs","repos_url":"https://api.github.com/users/carl-mastrangelo/repos","events_url":"https://api.github.com/users/carl-mastrangelo/events{/privacy}","received_events_url":"https://api.github.com/users/carl-mastrangelo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/carl-mastrangelo/grpc.github.io","description":"The grpc.io website. (on GitHub pages)","fork":true,"url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io","forks_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/forks","keys_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/teams","hooks_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/hooks","issue_events_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/events","assignees_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/tags","blobs_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/languages","stargazers_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/stargazers","contributors_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/contributors","subscribers_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/subscribers","subscription_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/subscription","commits_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/merges","archive_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/downloads","issues_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/labels{/name}","releases_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/carl-mastrangelo/grpc.github.io/deployments","created_at":"2016-11-18T18:07:43Z","updated_at":"2016-11-18T18:07:45Z","pushed_at":"2018-02-27T02:25:13Z","git_url":"git://github.com/carl-mastrangelo/grpc.github.io.git","ssh_url":"git@github.com:carl-mastrangelo/grpc.github.io.git","clone_url":"https://github.com/carl-mastrangelo/grpc.github.io.git","svn_url":"https://github.com/carl-mastrangelo/grpc.github.io","homepage":"","size":5199,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"grpc:master","ref":"master","sha":"fcd4ae2269c4a1da709370b59f7b9fe0cfc03e36","user":{"login":"grpc","id":7802525,"avatar_url":"https://avatars1.githubusercontent.com/u/7802525?v=4","gravatar_id":"","url":"https://api.github.com/users/grpc","html_url":"https://github.com/grpc","followers_url":"https://api.github.com/users/grpc/followers","following_url":"https://api.github.com/users/grpc/following{/other_user}","gists_url":"https://api.github.com/users/grpc/gists{/gist_id}","starred_url":"https://api.github.com/users/grpc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grpc/subscriptions","organizations_url":"https://api.github.com/users/grpc/orgs","repos_url":"https://api.github.com/users/grpc/repos","events_url":"https://api.github.com/users/grpc/events{/privacy}","received_events_url":"https://api.github.com/users/grpc/received_events","type":"Organization","site_admin":false},"repo":{"id":30666740,"name":"grpc.github.io","full_name":"grpc/grpc.github.io","owner":{"login":"grpc","id":7802525,"avatar_url":"https://avatars1.githubusercontent.com/u/7802525?v=4","gravatar_id":"","url":"https://api.github.com/users/grpc","html_url":"https://github.com/grpc","followers_url":"https://api.github.com/users/grpc/followers","following_url":"https://api.github.com/users/grpc/following{/other_user}","gists_url":"https://api.github.com/users/grpc/gists{/gist_id}","starred_url":"https://api.github.com/users/grpc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grpc/subscriptions","organizations_url":"https://api.github.com/users/grpc/orgs","repos_url":"https://api.github.com/users/grpc/repos","events_url":"https://api.github.com/users/grpc/events{/privacy}","received_events_url":"https://api.github.com/users/grpc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/grpc/grpc.github.io","description":"The grpc.io website. (on GitHub pages)","fork":false,"url":"https://api.github.com/repos/grpc/grpc.github.io","forks_url":"https://api.github.com/repos/grpc/grpc.github.io/forks","keys_url":"https://api.github.com/repos/grpc/grpc.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/grpc/grpc.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/grpc/grpc.github.io/teams","hooks_url":"https://api.github.com/repos/grpc/grpc.github.io/hooks","issue_events_url":"https://api.github.com/repos/grpc/grpc.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/grpc/grpc.github.io/events","assignees_url":"https://api.github.com/repos/grpc/grpc.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/grpc/grpc.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/grpc/grpc.github.io/tags","blobs_url":"https://api.github.com/repos/grpc/grpc.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/grpc/grpc.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/grpc/grpc.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/grpc/grpc.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/grpc/grpc.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/grpc/grpc.github.io/languages","stargazers_url":"https://api.github.com/repos/grpc/grpc.github.io/stargazers","contributors_url":"https://api.github.com/repos/grpc/grpc.github.io/contributors","subscribers_url":"https://api.github.com/repos/grpc/grpc.github.io/subscribers","subscription_url":"https://api.github.com/repos/grpc/grpc.github.io/subscription","commits_url":"https://api.github.com/repos/grpc/grpc.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/grpc/grpc.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/grpc/grpc.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/grpc/grpc.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/grpc/grpc.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/grpc/grpc.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/grpc/grpc.github.io/merges","archive_url":"https://api.github.com/repos/grpc/grpc.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/grpc/grpc.github.io/downloads","issues_url":"https://api.github.com/repos/grpc/grpc.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/grpc/grpc.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/grpc/grpc.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/grpc/grpc.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/grpc/grpc.github.io/labels{/name}","releases_url":"https://api.github.com/repos/grpc/grpc.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/grpc/grpc.github.io/deployments","created_at":"2015-02-11T19:55:59Z","updated_at":"2018-02-26T10:31:45Z","pushed_at":"2018-02-27T17:26:37Z","git_url":"git://github.com/grpc/grpc.github.io.git","ssh_url":"git@github.com:grpc/grpc.github.io.git","clone_url":"https://github.com/grpc/grpc.github.io.git","svn_url":"https://github.com/grpc/grpc.github.io","homepage":"","size":5184,"stargazers_count":148,"watchers_count":148,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":272,"mirror_url":null,"archived":false,"open_issues_count":57,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":272,"open_issues":57,"watchers":148,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634"},"html":{"href":"https://github.com/grpc/grpc.github.io/pull/634"},"issue":{"href":"https://api.github.com/repos/grpc/grpc.github.io/issues/634"},"comments":{"href":"https://api.github.com/repos/grpc/grpc.github.io/issues/634/comments"},"review_comments":{"href":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634/comments"},"review_comment":{"href":"https://api.github.com/repos/grpc/grpc.github.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/grpc/grpc.github.io/pulls/634/commits"},"statuses":{"href":"https://api.github.com/repos/grpc/grpc.github.io/statuses/f04eada3bd86b91d5767786c08df18e4f318216f"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"LisaFC"}}