About


Hi, my name is Irpan. I live in Indonesia. This blog is to provide you with my trip stories, my ideas and some other things.

Facebook

BloggerHub

Connect with me

Jadwal Sholat

Bocoran Dapur Gojek, 350 Juta API Hit Per Hari

Posting Komentar
Go-Talk ITB
Go-Talk

Saya berkesempatan mengikuti acara Go-Talk yang diselenggarakan oleh Gojek bekerjasama dengan ITB, dalam rangka program Go-Academy. Acara ini berlangsung pada hari Jum'at, 30 November 2018, di kampus ITB.

Hadir sebagai pembicara adalah Iqbal Faraby dan Giovanni Sakti Nugraha, keduanya adalah alumni ITB.

Berikut adalah catatan dari materi yang disampaikan oleh kedua pembicara:

Pembicara pertama
Iqbal Faraby

Cikal bakal Gojek sudah berdiri sejak tahun 2009. Namun pada saat itu, sistemnya masih call center, dan pelanggannya masih corporate. Jadi perusahaan yang butuh transport, telpon ke nomor call center go-jek, lalu kemudian dikirim kendaraan kesana.

App Gojek diluncurkan tahun 2015, dan dalam 3 tahun telah berkembang sebesar 6.600 %. Awalnya hanya go-ride, go-mart dan go-send. Namun hingga tahun 2018 ini Gojek sudah berkembang sangat pesat. Gojek  melakukan ekpansi ke 4 negara: Singapura, Thailand, Filipina, dan Vietnam. Service Gojek juga sudah banyak, bahkan untuk kebutuhan operasionalnya, Gojek mengakuisisi 3 perusahaan Fintech yakni Midtrans, Kartuku, dan Mapan.

Sekarang ini sistem Gojek  menangani sekitar 3jt order perhari. Dari sisi teknis terjadi 350jt API calls per detik.

Operasional dan lalu lintas data sebesar ini, tentulah membutuhkan sistem, baik hardware maupun software yang skala besar pula. Dalam menangani operasional teknis sebesar itu, Gojek melakukan 3 pendekatan:
  • Tech and tools
  • Metodologi
  • Engineering culture

Tech And Tools
System Gojek menerapkan arsitektur microservices. Applikasi layanan Gojek dipecah-pecah menjadi banyak sekali microservices, alias layanan-layanan yang secara teknis independen. Sistem microservices ini digunakan supaya ketika ada satu layanan yang bermasalah, sistem Gojek tetep jalan.

System Gojek menggunakan Nginx sebagai load balancer. Dibelakang nginx baru server-server microservices. Ada sekitar 500 services yang membentuk Gojek. 500 services ini dimaintain oleh 300 orang engineer.

Setiap harinya, para engineer melakukan ratusan push/hari. Push ini bisa berupa upgrade sistem maupun bug fixing.

Adapun perubahan-perubahan yang dipush tersebut harus lulus melalui 3 tahap terlebih dahulu, yakni:
  • Tahap 1. CI/DI Gitlab
  • Tahap 2. Server Staging
  • Tahap 3. Server Production

Server Gojek menggunakan Linux, yang berjalan pada sekitar 20.000 CPU. Memanfaatkan Kubernetes sebagai container dan scaling managementnya.

Dari diagram arsitekturnya bisa dikelompokan menjadi beberapa komponen:
  • Services
  • Worker
  • Stream Processing (kafka)
  • Database

Gojek menerapkan cara 3D Microservices Scaling:
  • Functional Decomposition
  • Data partitioning
  • Horizontal scaling of individual services
Setiap services memanfaatkan software yang berbeda-beda, namun umumnya menggunakan software opensource. Software-software tersebut diantaranya:
  • Go
  • Rails
  • Java
  • Scala
  • Clojure
  • Python
  • Postgre
  • Rocksdb
  • Hazel cast
  • Rabbitmq
  • Redis
  • dll

Methodology
Adapun methodology development yang digunakan Gojek adalah Agile. Sistem Gojek didevelop secara bagian (chunk) yang kecil. Setiap chunk, ditest dan divalidasi dulu. Baru dideploy. Kemudian lanjut ke chunk berikutnya.

Engineering Culture
Selain hal-hal yang sifatnya teknis, Gojek juga mengembangkan budaya kerja sendiri. Budaya kerja inilah yang menjadikan Gojek seperti sekarang ini.

Poin-poin budaya kerja tsb diantaranya:
  1. Everyone writes code. At Gojek, writing code is not low level task, it's at very core of what we do. Leader who code are better on judges of technical skill in people.
  2. Everyone needs to walk the talk
  3. Leaders are grown not made
  4. Every decision is right at the time it made. Blameless postmortem. Ketika terjadi kesalahan, yang dilakukan adalah: Apanya yang salah? bukan Siapa yang salah? lalu dicarikan solusinya
  5. Working in tech mean learning all the time. Engineer is a forever student.
  6. Pair programming and TDD (Test Driven Development). TDD ini bisa mencegah terjadinya defect.
  7. Be Confident and stay humble
Engineer di Gojek harus memahami Intelectual Humility (https://en.wikipedia.org/wiki/Intellectual_humility). Selain itu mereka harus mau belajar dan terus belajar, dan kalau melakukan kesalahan, dia berani mengakuinya.

Selama ini Gojek senantiasa "mengambil/menerima".  Yang dimaksud mengambil disini adalah, Gojek menggunakan segala macam software open source yang bisa dikatakan gratis.

Sebagai wujud tanggung jawab moral, Gojek pun kemudian "memberi". Gojek membuat beberapa tools yang selama ini digunakan oleh para engineer Gojek untuk memudahkan pekerjaannya. Tools-tools tersebut kemudian dijadikan open source supaya bisa dimanfaatkan oleh orang banyak.

Tools-tools open source Gojek ini bisa dibuka di:
http://www.github.com/Gojektech

selain itu ada beberapa karya Gojek juga bisa dimanfaatkan oleh umum:
http://www.github.com/Gojekfarm
http://www.github.com/go-squads
http://blog.Gojekengineering.com
http://slides.com/qblfrb

***
Pembicara kedua
Giovanni Sakti Nugraha

Membuka pembicaraannya dengan sebuah pengakuan bahwa dia adalah seorang hacker. Hadirin merespon dengan wah,wow dan sejenisnya. Namun Gio segera meluruskan, bahwa hacker yang dia maksud bukan dalam pengertian salah kaprah yang sudah terlanjur dipahami masyarakat dewasa ini.

Dalam pengertian populer, hacker adalah seorang yang bisa memasuki sistem komputer teraman sekalipun dan melakukan apapun yang dia mau.

Adapun Hacker yang dimaksud Gio disini adalah orang yang suka ngoprek hal-hal baru yang ada hubungannya dengan teknologi.

Gio menunjukkan sebuah cover buku pada slide presentasinya. Buku tersebut berjudul The Cathedral and The Bazaar, karya Eric S. Raymond. Dengan penjelasan singkat Gio menyampaikan bahwa dengan sistem Bazaar pun, kita bisa mengambil nilai bahkan making money out of it.

Itulah yang membuat Gojek, dalam membangun sistemnya secara teknis, menggunakan produk-produk open source.

Meski memang sistem Bazaar ini mempunyai beberapa kekurangan, diantaranya:
  • No Warranty
  • Effort maintenance
  • Unwritten responsibility to community
Namun Gojek tetap menggunakan produk Open Source; dan untuk menanggulangi kekurangan diatas, maka Gojek menghire engineer-engginer yang bisa mengikuti culture kerja seperti yang telah dipaparkan diatas.

Gio kemudian menceritakan bagaimana Gojek "membayar" program-program open source yang dimanfaatkannya selama ini. Adapun cara membayarnya adalah, program-program atau tools-tools yang selama ini digunakan Gojek untuk membantu engineernya mendevelop sistem Gojek, itu dijadikan program open source.

Dengan demikian, program-program tersebut bisa diakses oleh umum, bahkan sampai ke source codenya.

Meski memang tidak begitu saja dishare ke orang. Setiap program yang dijadikan open source akan melalui proses penyaringan terlebih dahulu. Dari setiap program tersebut akan dipilah dulu, mana bagian yang benar-benar rahasia dapur Gojek (proprietary), mana yang boleh diakses oleh umum.

Beberapa Contoh tools yang digunakan engineer Gojek kemudian dijadikan open source adalah:
  • Need robust http client for Go Language, that can handle our scale-> heimdall
  • Need automate infrastructure related task, make it self service -> proctor 
  • Need centralize loging paltform to manage loging across all of Gojek service-> BaritoLog
  • We need platform single sign on -> gate-sso
Mengapa Gojek mau meng-open source-kan tool-tool mereka?

Disamping sebagai "bayar utang budi", ternyata ada alasan cukup lucu yang dikemukakan oleh Gio. Yakni, ketika seorang developer akan merelease kode yang open source, dia akan membuatnya sesempurna mungkin. Karena kode tersebut akan dilihat oleh orang banyak, dari semua level keterampilan. Si developer akan malu kalau kode buatannya ketahuan banyak kekurangannya.

Padahal si Developer tidak akan sehati-hati itu kalau membuat kode untuk lingkungan internal perusahaan.

Pemaparan tentang alasan developer ini memancing tawa riuh dari para hadirin.

Kemudian Gio mengutip quote dari buku The Cathedral and The Bazaar, "Given enough eyeballs all bugs are shallows." Karenanya di Gojek ditanamkan culture untuk selalu kolaborasi, kolaborasi dan kolaborasi.

Memasuki sesi tanya jawab, diantara peserta yang sebagian besar masih mahasiswa ini ada yang bertanya, bagaimana tipsnya supaya bisa diterima kerja di Gojek.

Baik Iqbal maupun Gio mempunyai jawaban yang senada, yakni pelamar harus punya portfolio.

Caranya adalah dengan membuat account di github, lalu upload program-program yang pernah kalian buat. Selain itu sebaiknya menjadi kontributor di salah satu project open source. Pada project apapun.

Namun biar effort kita nggak sia-sia, buatlah program/project, atau bergabunglah di project open source, yang kita memang menggunakannya sehari-hari. Jangan buat program atau gabung di project yang kita tidak gunakan. Karena itu hanya membuang-buang energi kita saja.

Selain github, ada juga website codetriage.com. Pada website ini kita juga bisa berkontribusi di salah satu project open source.

Bicara masalah spesialisasi bahasa pemrograman, Gojek tidak mematikan potensi seorang engineer dengan membuatnya jadi spesialis satu bahasa saja. Semua Engineer diberi kebebasan untuk mengembangkan diri, karena potensi orang itu tidak terbatas. Tinggal si engineernya sendiri, apakah mau mengembangkan diri atau tidak.

Point lainnya seputar budaya kerja adalah:
  1. Learning
  2. Professionalism

Dalam menangani masalah, ada 3 hal yang harus diketengahkan:
  1. Grip
  2. Problem solving
  3. Collaboration
Tagline Gojek adalah social impact, jadi solusi apapun yang dibuat Gojek haruslah dilandasi oleh semangat social impact, bagaimana produk yang saya buat ini bisa berpengaruh atau memberikan nilai positif pada masyarakat.

Pertanyaan lainnya adalah seputar monitoring sistem.

Ada yang disebut dengan Pillar of Capability, yakni:
  • Monitor
  • Log
  • Trace
Ketiga komponen ini harus ada pada setiap system yang harus selalu online. Salah satu contoh tracer yang digunakan di Gojek adalah Jaeger.

Ada lagi pertanyaan tentang serverless product
Gio dan Iqbal menyatakan bahwa saat ini Gojek sedang mengeksplor tentang serverless product ini dan dimasa mendatang bisa saja Gojek mengaplikasikan konsep serverless product ini.

Related Posts

Posting Komentar