• Exclusive: a behind-the-scenes look at Facebook release engineering

  • 독점 기사: Facebook 릴리즈 엔지니어링 은밀히 들여다 보기

Image of 983 article
  • Facebook is headquartered in Menlo Park, California at a site that used belong to Sun Microsystems. A large sign with Facebook's distinctive "like" symbol—a hand making the thumbs-up gesture—marks the entrance. When I arrived at the campus recently, a small knot of teenagers had congregated, snapping cell phone photos of one another in front of the sign.
  • Facebook은 캘리포니아 멘로 파크 안에 옛날 Sun Microsystems가 썼던 곳을 본사로 사용하고 있다. Facebook 입구엔 Facebook만의 독특한 상징인 "like" 심볼이 그려진 큰 간판이 놓여져 있다. 내가 최근에 Facebook 캠퍼스에 도착했을 땐, 몇몇 십대 아이들이 그 간판 앞에서 서로 핸드폰 스냅 사진을 찍으려고 모여있었다.
  • Thanks to the film The Social Network, millions of people know the crazy story of Facebook's rise from dorm room project to second largest website in the world. But few know the equally intriguing story about the engine humming beneath the social network's hood: the sophisticated technical infrastructure that delivers an interactive Web experience to hundreds of millions of users every day.
  • 영화 "The Social Network" 덕분에, Facebook이 기숙사 방 프로젝트에서 세계에서 두번째로 큰 웹사이트로 성공하기 까지의 놀라운 스토리를 수많은 사람들이 알게 되었다.
    그러나, 또 동시에 매일 수억명의 사용자들에게 상호작용하는 웹 경험을 전달하는 매우 복잡한 기술 인프라 인, Facebook의 덮개 밑에 돌아가는 엔진에 대한 아주 흥미로운 이야기는 오직 소수의 사람들만이 알고 있다.
  • I recently had a unique opportunity to visit Facebook headquarters and see that story in action. Facebook gave me an exclusive behind-the-scenes look at the process it uses to deploy new functionality. I watched first-hand as the company's release engineers rolled out the new "timeline" feature for brand pages.
  • 나는 최근에 Facebook 본사를 방문해서 실제로 일어나고 있는 이야기들을 볼 수 있는 아주 특별한 기회를 얻었다. Facebook은 나에게 독점적으로 새로운 기능들을 배포하는 과정을 은밀히 들여다 볼 수 있는 기회를 주었다.나는 브랜드 페이지들을 위한 새로운 "timeline" 기능이 출시되는 것을 Facebook 릴리즈 엔지니어들과 같이 직접 지켜보았다.
  • As I passed through the front entrance of the campus and onto the road that circles the buildings, I saw the name on a street sign: Hacker Way. As founder Mark Zuckerberg explained in an open letter to investors earlier this year when Facebook filed for its initial public offering, he also gave the name "The Hacker Way" to the company's management philosophy and development approach. During my two days at Facebook, I learned about the important role that release engineering has played in making The Hacker Way scale alongside the site's rapid growth in popularity.
  • Facebook 캠퍼스의 입구를 지나 건물들을 순환하는 도로에 들어서면서, 나는 도로 표지판에 "Hacker Way"라고 써있는 것을 보았다. 올해 초 Facebook이 주식 공모를 위해 서류를 제출하면서 창업자인 마크 주커버그가 *공개 편지에서 투자자들에게 설명한 것 처럼, 그는 Facebook의 경영 철학과 개발 구상에 대해서도 "The Hacker Way"라는 이름을 붙였다. 나는 Facebook에서 이틀 머무는 동안, 인기 속에서 점점 빠르게 성장하고 있는 사이트와 함께 "Hacker Way"를 넓혀가고 있는 릴리스 엔지니어링의 중요한 역할에 대해서 배웠다.
  • note icon
    *이 편지의 한국어 번역 http://www.looah.com/article/view/738
  • The Menlo Park campus is a massive space, densely packed with buildings; it felt more like I was entering a tiny city than a corporate campus. Inside the buildings, tasteful graffiti-like murals and humorous posters decorate the walls. Instead of offices, Facebook developers work mostly in open spaces laid out like bullpens. Workstations are lined up along shared tables, with no barriers between individual workers.
  • 멘로 파크 캠퍼스는 매우 큰 공간에 건물들이 빽빽히 모여있다; 회사 캠퍼스에 들어간다는 느낌보다는 작은 도시에 들어가는듯한 느낌을 받았다. 건물 내부는 우아한 벽화들과 유머러스한 포스터들이 벽을 장식하고 있다. 특정 개인이 일하는 사무실들 대신에, 페이스북 개발자들은 개별 공간을 벽으로 막지 않은, 넓고 오픈된 공간에서 일한다. 워크스테이션들은 공유된 책상에 나란히 올려져 있고 개개인 사이에는 벽(파티션)이 없다.
  • Each building has meeting rooms where employees can have discussions without disturbing other workers. The meeting rooms in each building are named after particular themes. For example, in one building, meeting rooms were named after jokes from Monty Python movies. In another, I saw rooms named after television shows. As I was led through another building, I chuckled at the sight of a room called JavaScript: The Good Parts, obviously named after Doug Crockford's influential book.
  • 각 건물은 직원들이 다른 직원들을 방해하지 않고 논의를 할 수 있는 미팅룸이 있다. 이 각 건물의 미팅룸들은 특별한 테마의 이름을 가지고 있는데, 예를 들면 한 빌딩의 미팅룸들 이름은 'Monty Python'이라는 영화에 나오는 농담들을 따서 지어졌고, TV쇼의 이름을 딴 방들도 보았다. 다른 건물로 안내를 받았을 때는 Doug Crockford의 유명한 책의 이름을 딴 'JavaScript: The Good Parts'라고 명명된 방을 보고 빙그레 웃었다.
  • I eventually reached the area where the release engineering team is headquartered. Like the rest of the development personnel, release engineering uses an open space at shared tables. But their space has a unique characteristic: a well-stocked bar.
  • 나는 마침내 릴리즈 엔지니어링 팀의 본부가 있는 곳에 도착했다. 다른 개발자들과 마찬가지로 릴리즈 엔지니어링 팀도 공유된 책상에 오픈된 공간을 이용하고 있다. 하지만 그들의 공간은 특별한 것을 가지고 있었다: 바로 잘 갖춰진 바(bar)이다.
  • The room initially had a partial wall between two vertical support pillars. When the release engineering team moved in, they converted the space into a bar with a countertop called the "hotfix bar," a reference to critical software patches. They work at a table positioned alongside the bar.
  • 처음에 그 방엔 두 개의 기둥 사이에 벽 일부만 있었다. 릴리즈 엔지니어링팀이 그 방으로 이사하면서, 그들은 그 공간을 크리티컬한 소프트웨어 패치를 의미하는 "hotfix"라는 이름의 조리대가 달려 있는 바(bar)로 개조해버렸다.
  • That was where I met Chuck Rossi, the release engineering team's leader. Rossi, whose workstation is conveniently located within arm's reach of the hotfix bar's plentiful supply of booze, is a software industry veteran who previously worked at Google and IBM. I spent a fascinating afternoon with Rossi and his team learning how they roll out Facebook updates—and why it's important that they do so on a daily basis.
  • 바로 그 곳에서 릴리즈 엔지니어링 리더인 Chuck Rossi를 만났다. "hotfix" 바의 수 많은 술들을 팔만 뻗으면 닿을 수 있는 자리에 앉은 Rossi는 이전에 구글과 IBM에서 일한 소프트웨어 산업에서 베테랑이다. 나는 Rossi와 그의 팀과 Facebook의 업데이트들을 어떻게 출시하는 지, 또 매일 그렇게 하는 게 왜 중요한 지 배우면서 환상적인 오후를 보냈다.
Image of 983 article
  • Chuck Rossi, the head of Facebook's release engineering team, sitting at the hotfix bar
  • "hotfix" 바에 앉아있는 Facebook의 릴리즈 엔지니어링 팀장, Chuck Rossi
  • Facebook's BitTorrent deployment system

  • Facebook의 BitTorrent 배포 시스템

  • The Facebook source code is largely written in the PHP programming language. PHP is conducive to rapid development, but it lacks the performance of lower-level languages and some more modern alternatives. In order to improve the scalability of its PHP-based infrastructure, Facebook developed a special transpiler called HipHop.
  • Facebook의 소스 코드는 주로 PHP라는 프로그램 언어로 짜졌다. PHP는 빨리 개발하기에는 좋지만 저수준 언어의 성능과 몇몇 최신 대안들에 대해서는 부족하다. 그래서, Facebook은 PHP 기반의 인프라스트럭쳐의 확장성을 향상시키기 위해, Facebook은 HipHop이라고 부르는 특별한 코드 변환기를 개발했다.
  • HipHop converts PHP into heavily optimized C++ code, which can then be compiled into an efficient native binary. When Facebook unveiled HipHop to the public in 2010 and began distributing it under an open source software license, the company's engineers reported that it reduced average CPU consumption on Facebook by roughly 50 percent.
  • HipHop은 PHP를 엄청나게 최적화 된 C++ 코드로 변환시키며, 이는 효과적인 네이티브 바이너리로 컴파일 할 수 있도록 만들어준다. 페이스북이 2010년에 HipHop을 공개하고 오픈소스 라이센스로 배포하기 시작하면서, 회사의 엔지니어들은 페이스북의 CPU 소모량이 대략 50퍼센트 정도 줄어든 것으로 보고했다.
  • Because Facebook's entire code base is compiled down to a single binary executable, the company's deployment process is quite different from what you'd normally expect in a PHP environment. Rossi told me that the binary, which represents the entire Facebook application, is approximately 1.5GB in size. When Facebook updates its code and generates a new build, the new binary has to be pushed to all of the company's servers.
  • 페이스북의 전체 코드 베이스는 하나의 실행가능한 바이너리로 컴파일 되기 때문에, 그들의 배포 프로세스는 일반적인 PHP 환경에서 기대되는 것과는 많이 다르다. Rossi는 페이스북 애플리케이션 전부를 나타내는 그 바이너리는 대략 1.5 GB라고 밝혔다. 페이스북이 코드를 업데이트하고 새로운 빌드를 생성할 때 새 바이너리는 반드시 페이스북 모든 서버에 push되어야 한다.
  • Moving a 1.5GB binary blob to countless servers is a non-trivial technical challenge. After exploring several solutions, Facebook came up with the idea of using BitTorrent, the popular peer-to-peer filesharing protocol. BitTorrent is very good at propagating large files over a large number of different servers.
  • 1.5 GB의 바이너리를 셀 수 없이 많은 서버로 옮기는 것은 기술적으로 중대한 도전이다. 몇몇 솔루션들을 탐색하면서 페이스북은 유명한 P2P 파일 공유 프로토콜인 BitTorrent를 사용하는 아이디어를 도출해냈다. BitTorrent는 큰 파일을 수많은 다른 서버들에 전파시키기에 매우 좋다.
  • Rossi explained that Facebook created its own custom BitTorrent tracker, which is designed so that individual servers in Facebook's infrastructure will try to obtain slices from other servers that are on the same node or rack, thus reducing total latency.
  • Rossi는 Facebook이 자신들만의 BitTorrent 트래커를 만들었으며, 이는 페이스북의 인프라스트럭처가 전체 (네트워크) 대기시간을 감소시키기 위해 같은 노드나 랙(rack) 상에 있는 다른 서버들로부터 바이너리 조각들을 얻도록 시도하게끔 디자인 되었다.
  • Rolling out a Facebook update takes an average of 30 minutes—15 minutes to generate the binary executable and another 15 minutes to push the executable to most of Facebook's servers via BitTorrent.
  • 페이스북 업데이트가 배포되는데는 평균 30분이 소요되는데, 15분은 실행가능한 바이너리를 생성하는데 소요되며, 나머지 15분은 바이너리를 BitTorrent를 통해 페이스북 서버들에 push되는데 소요된다.
  • The binary executable is just one part of the Facebook application stack, of course. Many external resources are referenced from Facebook pages, including JavaScript, CSS, and graphical assets. Those files are hosted on geographically distributed content delivery networks (CDNs).
  • 물론 실행가능한 바이너리는 페이스북 애플리케이션 스택에 있어 한 부분에 불과하다. 페이스북 페이지에서 JavaScript, CSS, 그래픽 자원 등 많은 외부 리소스들이 참조되고 있다. 그러한 파일들은 지역적으로 분산된 CDNs(Content Delivery Networks)을 통해 제공된다.
  • Facebook typically rolls out a minor update on every single business day. Major updates are issued once a week, generally on Tuesday afternoons. The release team is responsible for managing the deployment of those updates and ensuring that they are carried out successfully.
  • 페이스북은 일반적으로 매 근무일마다 마이너 업데이트를 진행한다. 메이저 업데이트는 일주일에 한번, 일반적으로 화요일 오후에 진행된다. 릴리즈팀은 그러한 업데이트들의 배포와 성공적인 업데이트 진행을 보장하는 것에 대한 책임이 있다.
  • Frequent releases are an important part of Facebook's development philosophy. During the company's earliest days, the developers used rapid iteration and incremental engineering to continuously improve the website. That technical agility played a critical role in Facebook's evolution, allowing it to advance quickly.
  • 잦은 릴리즈는 페이스북 개발 철학에 있어 중요한 부분이다. 페이스북 초기에 개발자들은 웹사이트를 계속적으로 개선시키기 위해 빠른 iteration과 점진적인 engineering을 사용해왔다. 그러한 기술적인 민첩함은 페이스북이 더 빠르게 발전하는데 중요한 역할을 했다.
  • When Facebook recruited Rossi to head the release engineering team, he was tasked with finding ways to make sure that the company's rapid development model would scale as the size and complexity of the Facebook website grew. Achieving that goal required some unconventional solutions, such as the BitTorrent deployment system.
  • 페이스북이 Rossi를 릴리즈 엔지니어링팀의 팀장으로 리쿠르팅 하면서 페이스북 웹사이트의 규모와 복잡도가 커지는만큼 확장할 수 있는 빠른 개발 모델을 찾는 업무를 맡겼다. 그러한 목적을 달성하기 위해서는 BitTorrent 배포 시스템과 같은 독특한 솔루션이 필요했다.
  • During the time that I spent talking with Rossi, I got the impression that his approach to solving Facebook's deployment problems is a balance of pragmatism and precision. He sets a high standard for quality and robustness, but aims for solutions that are flexible enough to accommodate the unexpected.
  • 내가 Rossi와 대화를 나누는동안 페이스북의 배포 문제에 대한 그의 실용적인 접근에 감명을 받았다. 그는 퀄리티와 탄탄함에 대한 높은 수준의 기준을 세웠지만, 솔루션을 찾기 위해서는 기대하지 않는 방식을 수용할만큼 충분히 유연했다.
  • Testing

  • 테스팅

  • In some of our recent articles, we've written about the challenges and rewards of moving software applications to faster release cycles. One of the major challenges of operating at this speed is keeping the quality high; it leaves far less time for beta testing.
  • 최근 몇몇 기사중에서 우리는 소프트웨어 어플리케이션들을 좀 더 빠르게 릴리즈하려고 하는 흐름에 대한 도전과 보상에 대해 썼었다. 이런 속도로 운영할 때 중요한 도전 중에 하나는 높은 품질을 유지하는 것이다. 즉, 베타 테스팅을 위한 시간이 줄어든다는 문제를 남겨두었다.
  • Quality testing poses a challenge for Facebook, which pushes out new changes every single day. To help spot problems, Facebook employees who access the social network from within the company's internal network will always see an experimental build of the site based on the very latest code, including proposed changes that haven't officially been accepted. When employees want to see the current production version of the website from within the network, they use a separate address.
  • 매일 새로운 변화를 반영해야 하는 Facebook에겐 품질 테스팅은 하나의 도전이다. 그런 문제들을 해결하기 위해 회사 내부 네트워크에서 소셜 네트워크에 접속할 수 있는 Facebook 직원들은 아직 공식적으로 수락되지 않은 기능들까지 포함된, 가장 최신 코드로 만들어진 실험적인 사이트를 항상 지켜볼 것이다.
  • Making the test site the default for employees ensures that pending features get more exposure before they are merged. The test site has some built-in bug reporting tools that make it easy for employees to supply feedback when they encounter issues.
  • 직원들에게 테스트 사이트를 기본 페이지로 만드는 것은 곧 출시된 기능들을 릴리즈되기 전에 더 많이 노출되도록 한다. 테스트 사이트는 몇몇 버그 리포팅 툴들이 빌트인 되어 있는 데, 이런 툴들은 직원들이 테스트하면서 이슈들을 발견했을 때 쉽게 피드백을 줄 수 있게 해준다.
  • Facebook also uses automated tests to avoid regressions and identify common issues. The company has two separate sets of these tests; one does some conventional sanity checking on the code and the other simulates user interaction to make sure that the website's user interface behaves properly.
  • Facebook은 또한 공통의 이슈를 정의하고 기능들이 퇴보하는 것을 막기 위해 자동화된 테스트들을 사용하고 있다. 이들 테스트들은 두개의 세트를 갖고 있는 데, 그 중에 하나는 일반적으로 쓰이는 코드를 sanity checking하는 것이고 다른 하나는 웹사이트에서 사용자 인터페이스가 명확하게 동작하도록 사용자의 상호 작용을 시뮬레이션하는 것이다.
  • note icon
    Sanity Checking: 프로그램의 소스 코드에서 보안상 위험이 있거나 기초적인 실수 등이 없는 지 체크하는 것을 뜻함.
  • Prior to rolling out a full update, the new code first gets pushed to the "a2" tier, a small number of public Facebook servers. This stage of the testing process exposes the update to many random Facebook users, but still just a fraction of the site's total audience, and it gives Facebook's engineers an opportunity to see how the update will perform in production.
  • 모든 업데이트를 출시하기 전에, 먼저 새로운 코드는 "a2"라고 불리우는 얼마 안되는 Facebook의 프로덕션 서버에 적용된다. 이 단계에서 많은 Facebook의 랜덤 사용자들에게 그 업데이트를 노출시켜주지만, 여전히 사이트 전체 사용자 중에선 극히 일부이다. 그리고, 이 단계는 Facebook 엔지니어들에게 프로덕션 환경에서 업데이트가 어떻게 작동하는 지 볼 수 있는 기회를 준다.
Image of 983 article
  • Chuck Rossi at his workstation
  • 그의 작업 공간에서 Chuck Rossi
  • Preflight

  • 배포하기 전 상황

  • Facebook hosts its own Internet relay chat (IRC) server for internal collaboration. Many of the company's engineers idle on a main channel while they are working. According to Rossi, it typically has 700 people in it during the average work day. Facebook's tool developers have created IRC bots that provide various kinds of functionality to integrate IRC into Facebook's development and deployment workflow.
  • Facebook은 내부 협업을 위해서 자체 IRC 서버를 관리하고 있다. 이 회사 많은 엔지니어들이 그들이 일하고 있는 동안 메인 채널에 대기하고 있다. Rossi에 따르면, 하루 평균 700명의 사람들이 대기 하고 있다고 한다. Facebook의 툴 개발자들은 IRC를 Facebook의 개발과 디플로이 워크플로에 통합하기 위해 다양한 종류의 기능을 제공하는 IRC 로봇들을 만들었다.
  • When Rossi is about to roll out an update, he initiates a checkin procedure on IRC. All of the developers who have submitted code for inclusion in the pending update are notified in the channel and have to respond to verify that they are present and ready for the update to go out.
  • Rossi가 업데이트를 반영하려고 할 때, 그는 IRC에서 체크인 프로시저를 시작했다. 곧 출시될 업데이트에 포함된 소스 코드를 작성한 모든 개발자들은 그 채널에서 공지받는다. 그리고, 그들은 모두 자리에 있고 업데이트를 출시할 준비가 되었다고 확인해서 알려줘야 한다.
  • When a developer doesn't respond within a few minutes, Rossi can send a command to a bot that will attempt to get the developer's attention through several different communication channels, including e-mail and text messages. As Rossi explained to me, he typically prefers to have all of the contributing developers on hand when deploying an update.
  • 개발자가 몇 분 내에 답변하지 않을 땐, Rossi는 이메일과 문자같은 다른 여러개의 커뮤니케이션 채널들을 통해서 개발자의 주목을 끌 수 있게 IRC 로봇에게 명령어를 보낼 수 있다. Rossi는 나에게 설명했던 것처럼, 일반적으로 업데이트를 디폴로이할 땐 도움을 구할 수 있는 개발자 모두와 같이 일하는 것을 좋아한다.
  • An important aspect of Facebook's development culture is the idea that developers are fully responsible for how their code behaves in production. This philosophy mirrors the "DevOps" movement, which encourages lowering the wall between software development and IT operations.
  • Facebook의 개발 문화에서 중요한 점은 프로덕션 환경에서 개발자들이 그들의 소스 코드가 어떻게 동작하는 지에 대한 모든 책임을 진다는 것이다. 이런 철학은 소프트웨어 개발과 운영 사이의 벽을 낮추는 것을 장려하는 "DevOps"라는 움직임을 반영한 것이다.
  • If any of the code in a Facebook update causes problems in production, the developer who wrote it is on the hook for making sure that the issue gets resolved as quickly as possible.
  • 만약 실제 서비스 환경에서 Facebook의 업데이트 안에 어떤 코드가 문제들을 초래한다면, 그 코드를 작성한 개발자는 가능한 빨리 그 이슈를 확실히 해결해야 하는 곤란한 상황에 처하게 된다.
  • Deployment

  • 배포

  • Rossi's workstation at Facebook consists of a 30-inch Dell display, a Mac laptop, and a secondary vertical monitor. During the Tuesday I spent with him, much of his work was done in a browser and in terminal windows. When he was ready to roll out the update, he issued a command in one of the terminals to begin the process.
  • 페이스북에서 Rossi의 워크스테이션은 30인치 델 모니터와 맥, 그리고 보조의 세로형 모니터로 구성되어 있다. 그와 함께 보낸 화요일 내내 그의 일 상당 부분이 브라우저와 터미널 윈도우에서 끝났다. 업데이트를 배포할 준비가 되었을 때 그는 배포 프로세스를 시작하기 위해 한 터미널에 명령어를 입력했다.
  • We watched the status of the rollout in one of Facebook's Web-based system monitoring tools. The webpage displayed a large progress bar showing the percentage of the company's servers that had successfully been updated to the new binary. The progress bar moved forward as the automatic rollout proceeded. At the far left edge, a thin sliver of red appeared, representing the small number of systems that failed to pick up the new version.
  • 우리는 배포 상황을 페이스북의 웹 기반 시스템 모니터링 툴을 통해 지켜봤다. 웹페이지는 새로운 바이너리가 성공적으로 업데이트 진행된 서버들의 퍼센테이지를 나타내는 큰 프로그레스바를 보여줬다. 프로그레스바는 배포가 진행되는만큼 자동적으로 앞으로 나아갔다. 모니터의 저쪽, 왼쪽 끝에선 적은 수의 시스템이 새로운 버전을 가져가는데 실패했음을 나타내는 얇게 반짝이는 붉은색이 나타났다.
  • Rossi said that he commonly sees a small number of systems fail to complete the update during deployment and that it's usually caused by hardware issues. For example, a server might fail to update if its storage capacity is low or if it encounters a network issue while torrenting the file. The number of servers that fail is typically small enough to pose no difficulties.
  • Rossi는 소스 코드를 배포하는 동안 소수의 시스템들이 업데이트를 실패하는 것은 흔히 본다고 말했다. 그리고, 그것은 보통 하드웨어 이슈 때문에 발생된다. 예를 들면, 서버의 저장 공간 용량이 낮거나 파일을 토렌토를 통해 다운받는 동안 네트워크 이슈가 발생해서 서버가 업데이트를 실패할 수 있다.
  • While the software deployed to the servers, Rossi described how some characteristics of Facebook's architecture impact the update process. Facebook is designed to be stateless and distributed, in the sense that the user's session isn't tied to any particular server. Any given page request can be handled by any of the servers in Facebook's infrastructure.
  • 소프트웨어가 서버에 배포되는 동안, Rossi는 Facebook의 아키텍쳐의 몇몇 특징들이 어떻게 업데이트 과정동안 영향을 주는 지 설명해주었다. Facebook은 사용자의 세션이 특정 서버에 묶이지 않는다는 의미에서 무상태(stateless)와 분산처리되도록 디자인되어졌다. 어떤 페이지가 요청되어 지면 Facebook의 인프라스트럭쳐 안에서 어떤 서버든 처리할 수 있다.
  • That approach offers a lot of resilience. When Facebook performs an update, it doesn't have to worry about serializing and migrating the state of user sessions. The deployment system restarts the Facebook executable process on the servers in waves as they receive the update. The servers that are already finished or still running the old version can continue handling incoming page requests while the update is being rolled out across the company's infrastructure.
  • 이런 처리 방법은 많은 복원력을 준다. Facebook이 업데이트를 수행할 때 사용자 세션들의 상태를 이전하거나 직렬화하는 것에 대해 걱정하지 않아도 된다. 배포 시스템은 서버들이 업데이트를 받자 마자 연달아 실행가능한 Facebook 프로세스들을 다시 시작한다. 회사의 인프라스트럭쳐를 통해서 업데이트가 출시되고 있는 동안에도 이전 버젼을 여전히 돌리고 있거나 아니면 벌써 끝낸 서버들은 계속해서 다음 페이지 요청들을 처리할 수 있다.
  • Facebook continues operating at nearly full capacity during an update. A typical Facebook deployment doesn't require scheduled downtime or cause any other disruption to the website. Rossi said that the no-downtime update is an important requirement of the Facebook release strategy. He also views it as a hallmark of quality Web software engineering.
  • Facebook은 업데이트하는 동안에도 서비스를 완전 가동한다. 보통의 Facebook의 배포는 웹사이트를 중단시켜야 하거나 다운타임을 스케줄을 잡거나 할 필요가 없다. Rossi는 다운타임없이 업데이트하는 것은 Facebook 릴리즈 전략에 중요한 요구 사항이라고 말했다.그는 또한 이걸 웹 소프트웨어 엔지니어링의 품질 보증 마크로 본다.
  • Postmortem

  • 업데이트 후 점검

  • After the update completes, Rossi looks at various aspects of the system to make sure that the changes didn't break anything. His team has access to a sophisticated set of analytics tools that they use to track Facebook's status. The main dashboard shows a multitude of line graphs that show changes in traffic, resource consumption, error rates in individual segments of the product, and many other relevant metrics.
  • 업데이트를 완료한 후에, Rossi는 새로 반영된 것들이 어떤 걸 깨뜨리지 않았는 지 확인하기 위해 시스템의 다양한 면들을 살펴본다. 그의 팀은 Facebook의 상태를 추적하기 위해 그들이 사용 중인 분석 툴들의 정교한 세트(대쉬보드)에 접속할 수 있다.이 메인 대쉬보드는 트래픽의 변화, 자원 사용량, 프로덕션 환경의 각각의 세그먼트 안에서 에러 비율과 많은 다른 관련된 메트릭을 알 수 있는 아주 많은 수의 라인 그래프를 보여준다.
  • Watching the fluctuation of those vital signs helps Facebook identify problems in the system. Comparing against historical data makes it easier to pinpoint exactly when a problem began to occur. The release team and other Facebook engineers pay particularly close attention to the site's status after an update to make sure that there are no anomalies.
  • 이들 바이탈 사인의 변동을 지켜보는 것은 시스템 안에서 Facebook이 문제들을 찾는 데 도움이 된다. 지난 데이타와 비교하는 것은 문제가 발생할 때 어디서 그랬는 지 정확하게 집어내는 걸 도와준다. 릴리즈 팀과 Facebook 엔지니어들은 특별히 업데이트 후에 이상이 없다는 걸 확인하기 위해 사이트의 상태를 주목해서 지켜본다.
  • If a problem is detected, such as an unexpectedly high error rate from some part of the system, the company's engineers can dig into the error logs to see exactly what's going on. Facebook's internal tools for viewing and analyzing error logs make it easy for the user to see what code changes are associated with a particular error message.
  • 만약 어떤 문제가 발견되면, 시스템의 일부에서 예기치 않은 높은 에러 비율같은, 회사의 엔지니어들은 정확히 어떤 일이 벌어지고 있는 지 보기 위해서 에러 로그들을 파헤친다. 에러 로그들을 보여주고 분석하는 Facebook의 내부 툴들은 사용자가 특정 에러 메세지 관련된 코드의 변화들을 쉽게 볼 수 있게 해준다.
  • The many data sources tracked by Facebook's internal monitoring tools even include tweets about Facebook. That information is displayed in a graph with separate trend lines to show the change in volume of positive and negative remarks. This is useful, since one of the things that people do when they encounter a technical problem on a social network is complain about it on a different social network.
  • 많은 데이타 소스들은 Facebook의 내부 모니터링 툴에 의해서 추적된다. 심지어 Facebook에 대한 트윗들까지. 이 정보들은 Facebook에 대해 긍정적인 발언과 부정적인 발언의 양의 변화를 각각 다른 추세선(trend line)으로 보여준다. 이것은 유용하다. 왜냐면, 사람들이 소셜 네트워크 사이트에서 테크니컬한 문제에 부딪힐 때 하는 것 중에 하나가 다른 소셜 네트워크에서 그것에 대해 컴플레인하는 것이기 때문이다.
  • The update that I observed went smoothly; no technical problems or bugs emerged after the rollout. The graphs showed a minor spike in log messages from one system component, but it ended up being a non-issue after Rossi's team tracked down the source.
  • 내가 관찰한 업데이트는 순조롭게 진행되었다. 출시된 후에 어떤 기술적인 문제들이나 긴급한 버그들 없이. 하나의 시스템 컴포넌트로 온 에러 메세지 안에서 그래프가 작은 스파이크를 보여줬다. 그러나, Rossi 팀이 그 소스를 추척한 후에 이슈가 아닌 걸 확인하고 끝났다.
Image of 983 article
  • Facebook's release engineering team celebrating a successful update
  • Facebook의 릴리즈 엔지니어링 팀이 성공적인 업데이트를 축하하고 있다.
  • Reverting is for losers

  • 소스를 예전 껄로 되돌리는 건 패배자들이나 한다.

  • Although there were no fires to put out while I was there, Rossi indulged my curiosity by describing how Facebook responds when an update doesn't go smoothly. If a serious bug gets detected after an update, the release engineering team works with the relevant developers to resolve the problem as quickly as possible. When a fix is ready, Rossi's team will spin up and roll out a new update.
  • 내가 있는 동안, 해결해야 할 급한 일이 생기지는 않았지만, Rossi는 업데이트 과정에서 문제가 생겼을때 페이스북이 어떻게 대처하는지 설명해 주며 나의 궁금증을 해결해 주었다. 업데이트 후에 심각한 버그가 발견되면, 릴리즈 엔지니어링 팀은 가능한 빨리 문제를 해결하기위해 관련 개발자와 함께 작업한다. 수정 코드가 준비되면, 로시의 팀은 새 업데이트를 배포한다.
  • I asked him if he ever has to revert to a previous version of the site when there are bugs that can't easily be fixed. "Reverting is for losers!" he replied.
  • 나는 혹시 쉽게 고칠수 없는 버그가 있으면 사이트를 예전버전으로 돌려 놓기도 하는지 물었다. 그는 "Reverting은 루저들이나 하는거죠" 라고 말했다.
  • He went on to explain that he does, in fact, have a mechanism in place for reverting to a previous version, but it's only used as a measure of last resort. The servers retain previous versions of the Facebook binary and can be made to switch back to those if it's absolutely necessary.
  • 그는 이전 버젼으로 되돌리기 위한 장치에 대해 설명에 들어갔다. 그러나, 이건 마지막 수단의 조치로 쓰여진다. 서버들은 이전 버젼의 Facebook 바이너리 코드를 가지고 있고 만약 이것이 절대적으로 필요하다면 그들로 다시 되돌릴 수 있다.
  • He said that rolling back to a previous version of Facebook is a bit like yanking the emergency stop handle in a train; it's undesirable and seldom done. In the years that he has been at Facebook, he's only had to do it a few times.
  • 그는 페이스북에서 이전 버전으로 돌리는 일은 기차의 비상정지 손잡이를 당기는것과 약간 비슷하다고 말했다. 바람직하지 않고, 거의 일어나지 않는. 그가 페이스북에 있는동안 몇 번 없었다고 한다.
  • Facebook's testing practices and culture of developer accountability help to prevent serious bugs from being rolled out in production code. When a developer's code disrupts the website and necessitates a post-deployment fix, the incident is tracked and factored into Facebook's assessment of the developer's job performance.
  • 페이스북의 테스트 습관과 개발자 책임 문화는 심각한 버그가 프로덕션 코드에 반영되는 것을 막는데 도움이 된다. 개발자의 코드가 사이트에 지장을 주고 배포 후 수정이 필요하면, 이 일은 추적 되어 그 개발자의 페이스북 인사평가에 영향을 주게 된다.
  • The company's internal tools have a Facebook-inspired mechanism that Rossi uses to keep score. Facebook's developers all have a "karma" rating that is tracked through the code review system. Rossi can increase or decrease a developer's karma by clicking on thumbs-up and thumbs-down icons that appear next to the developer's name in a Web-based dashboard.
  • 회사의 사내 툴에는 로시가 (인사) 점수 관리를 위해 페이스북과 비슷하게 만든 장치가 있다. 페이스북의 모든 개발자들은 코드 리뷰 시스템에 의해 추적되는 "카르마" 순위를 가지고 있다. 로시는 웹기반 데시보드에 있는 개발자들의 이름 옆에 '위', '아래' 아이콘을 눌러 개발자들의 카르마를 늘리거나 줄일 수 있다.
  • The thumbs-up icon in Rossi's tool is the same one used for the "like" function on the social networking site. The thumbs-down image is the same icon, but upside down. When Rossi showed me the icons, he joked that he's the only person in the world who has a Facebook "dislike" button.
  • 로시의 툴에 '위' 아이콘은 페이스북의 '좋아요' 기능과 같은 것이다. '아래' 버튼은 같은 아이콘을 뒤집어 놓았다. 로시는 내게 그 아이콘을 보여주며, 농담으로 자신이 전세계에서 유일하게 페이스북 '싫어요' 버튼을 가진 사람 이라고 말했다.
  • The karma scores help Facebook identify employees who are struggling, but the scores are also useful during the code review process. When Rossi sees a merge proposal from an engineer with a low karma score, he will know at a glance that accepting code from that developer potentially poses a higher risk.
  • 이 카르마 점수는 회사가 실적이 좋지 않은 직원을 찾아내는데 도움이 되지만, 또한 코드 리뷰 과정에도 도움이 된다. 만약 카르마 점수가 낮은 엔지니어가 코드 머지(merge)를 제안하면 로시는 만약 그 코드를 받아들일 경우 잠재적으로 높은 위험이 있을수 있다는 것을 한눈에 알수 있게된다.
  • Employees with low karma can regain their lost points over time by performing well—though some also try to help their odds by bringing Rossi goodies. Booze and cupcakes are Rossi's preferred currency of redemption; the release engineering team has an impressive supply of booze on hand, some of which was supplied by developers looking to restore their tarnished karma.
  • 낮은 카르마를 갖은 직원들은 실적을 올려(혹은 어떤 직원들은 로시에게 약간의 선물로 확률을 높이려고 하지만) 포인트를 다시 얻을수 있다. 술과 컵케이크는 로시가 좋아하는 선물이다. 릴리즈 엔지니어링 팀은 상당히 인상적인 정도의 술을 보유하고 있는데, 이중 상당수는 그들의 실추된 카르마를 올려볼 기대를 갖은 개발자들이 사온 것이다.
Image of 983 article
  • The Hotfix Bar in Facebook's release engineering department
  • 페이스북 릴리즈 엔지니어링 부서의 핫픽스 바
  • Ryan Paul
  • 라이언 폴
  • The future

  • 미래

  • I spoke with Rossi about his vision for how Facebook's deployment strategy will change as the company's technical infrastructure evolves. He said that future developments will enable his team to dramatically accelerate the rollout procedure, reducing the total build and deploy time to a fraction of the current 30 minutes.
  • 나는 Rossi와 회사의 인프라스트럭쳐가 발전할 때마다 어떻게 Facebook의 배포 전략이 변할 지 그의 비젼에 대해서 이야기했다. 그는 미래 개발들은 그의 팀이 극적으로 출시 프로시저를 가속하시켜서 전체 빌드하고 배포하는 시간을 현재의 30분보다 훨씬 더 단축히길 수 있을 거라고 말했다.
  • One of the major ongoing development efforts at Facebook is a project to replace the HipHop transpiler. Facebook's developers are creating their own bytecode format and custom runtime environment, called the HipHop virtual machine, to power the next generation of the Facebook platform. With this project finished, the company will be able to compile its PHP source into bytecode that will be executed by the virtual machine.
  • HipHop transpiler를 대체하는 프로젝트는 페이스북에서 공들여 개발을 진행하고 있는 것중의 하나이다. 페이스북 개발자들은 더 강화된 페이스북 플랫폼의 다음 세대를 만들기 위해 그들의 자체 바이트코드 포맷과 HipHop 가상머신이라고 불리는 커스텀 런타임 환경을 만들고 있다. 이 프로젝트가 끝나면 페이스북은 PHP 소스코드를 가상머신 상에서 실행될 수 있는 바이트코드로 컴파일할 수 있게 된다.
  • Transitioning to a managed code model, similar to that of Java and .NET, will give Facebook more flexibility across the board. In addition to offering many other advantages, Rossi explained that it will have significant implications for the deployment process. Instead of having to push a 1.5GB binary to all of the servers, the company can push thin bytecode deltas representing just the parts that have changed. Facebook may even be able to splice the updated bytecode into the application while it's running, avoiding a process restart.
  • Java와 닷넷과 유사한, 세심히 관리되는 코드 모델로 전환하는 것은 회사 전반에 걸쳐 Facebook에게 더 많은 유연성을 줄 것이다. 다른 많은 이익을 줄 뿐만 아니라, 배포 과정에도 중요한 의미가 될 것이라고 Rossi는 설명했다. 모든 서버에 1.5GB 바이너리를 배포하는 대신에, 회사는 변경된 부분에 해당되는 작은 바이너리코드 델타들을 배포할 수 있게 된다. Facebook은 프로세스의 재시작을 피하기 위해 어플리케이션이 돌아가는 동안 변경된 바이트코드를 어플리케이션에 연결하는 것도 가능하게 될 것이다.
  • When it's possible to push an update in mere minutes without the need for a large rollout process, it will be possible for Facebook to abandon its typical update schedule and move to a model where changes are rolled out into deployment incrementally, as they are developed. That approach would allow the company's developers to be even more agile than they are now.
  • 오랜 배포 과정이 필요없이 몇 분 안에 업데이트를 배포하는 것이 가능할 때, Facebook은 그동안 해왔던 업데이트 일정을 버리고 변경된 것들이 개발 되자 마자 바로 출시되는 모델로 이동이 가능할 것이다. 이런 시도는 지금보다 더 많은 기민함을 Facebook의 개발자들에게 줄 것이다.
  • After the Tuesday update process finished and Rossi's team analyzed the system to make sure that the update hadn't introduced any problems, they celebrated by downing a few drinks at the hotfix bar.
  • 화요일 업데이트 프로세스를 마치고 로시의 팀은 업데이트가 어떤 문제도 일으키지 않은것을 확인하기 위해 시스템을 분석한 뒤 핫픽스 바에서 약간의 술을 비우며 축하했다.
  • As I left the Facebook campus at the end of the day and strolled past the Hacker Way sign again, I reflected on the significant role that something as invisible as "release engineering" plays in bringing Facebook to the masses.
  • 그날 저녁 페이스북 켐퍼스를 떠나며 ' 헤커의 방식' 사인을 다시 지나쳐 갈 때, 나는 페이스북을 수많은 사람들이 쓸수 있게 하는데 "릴리즈 엔지니어링"같이 보이지 않는 무언가의 역할이 얼마나 중요한지 다시 생각해보았다.
  • Facebook's transition to the timeline profile layout will increase the social network's emphasis on providing a platform for users to share experiences and to document their personal narratives. The technical infrastructure that powers those capabilities has a story of its own, and an identity tied to Facebook's unique developer culture.
  • Facebook의 Timeline 프로필 레이아웃으로 변경된 것은 Facebook이 사용자에게 경험을 나누고 그들의 개인적인 이야기들을 적는 플랫폼을 제공하는 것에 더욱 더 중점을 두게 만들 것이다. 이런 능력을 발휘할 수 있게 해주는 기술적인 인프라스트럭쳐는 그것만의 이야기를 가지고 있다. 그리고, 정체성은 Facebook만의 개발자 문화에 달려있다.
13 Comments
channi777

channi777 • Oct 29th, 2012

좋다
umteeh

umteeh • May 3rd, 2012

함께 번역 해보고 싶은신분은 페북 한국어 번역모임으로 오세요 http://www.facebook.com/groups/374370265918889/
isyoon

isyoon • Apr 24th, 2012

개발자가 보는 관점에선 훈훈한 기사네요 ㅎㅎㅎ
chingu94

chingu94 • Apr 22nd, 2012

드뎌 번역이 끝났습니다. 대략 끝내고 매끄럽지 않은 부분들은 다시 보긴 했는 데 nilpoint님, umteeh님께서도 다시 한번 봐주시면 좋을 것 같아요.
아울러, 도와주신 두 분께 감사드립니다. (--)(__)
  • umteeh • Apr 23rd, 2012

    감사합니다. 저도 덕분에 공부 많이 했어요~

umteeh

umteeh • Apr 19th, 2012

저도 조금 돕고 싶은데.. 생소한 기술용어들이 많아 쉽지 않네요. ;;
  • chingu94 • Apr 19th, 2012

    @umteeh님 너무 감사합니다. 조금이 아니라 아주 큰 도움이 되고 계세요. 이미 다른 번역 많이 하셨던 데.. 전 처음이라 많이 가르쳐 주세요. 업계에서 통용되는 단어들은 제가 함 볼께요. 다시 한번 감사드립니다. ^^

  • umteeh • Apr 19th, 2012

    몇몇 단어들은 번역 하는것이 적절한지 확실치 않아 그냥 영어로 남겨둡니다. 업계에서 통용되는 한국어 번역이 있으면 고쳐주세요~ 감사합니다.

  • umteeh • Apr 19th, 2012

    @chingu94 그냥 제 번역은 초벌 번역이라 생각하시고, 틀린 내용 있으면 수정 부탁 드립니다.

chingu94

chingu94 • Apr 18th, 2012

안녕하세요. nilpoint님. 제가 일은 벌려놓고 프로젝트 마감 때문에 제대로 수습 못하고 있는 데 이렇게 도와주셔서 너무 감사합니다. 제가 정정해드릴만한 실력은 안되지만 같이 잘 마무리했으면 좋겠습니다. 너무 감사해요. ^^
nilpoint

nilpoint • Apr 16th, 2012

친구님. 영어 연습 삼아 일부분씩 번역을 해보고 있는데 어색한 표현이 있다면 정정 부탁드려요~ 번역이라는게 술술 되는게 아니군요. ㅋㅋ
euniya

euniya • Apr 14th, 2012

이 기사 기대되는데요? chingu님 화이팅!
  • chingu94 • Apr 16th, 2012

    ㅎㅎ 감사합니다. 근데, 생각만큼 시간내기 어렵네요. 그래도.. 불끈.. ^^