Pada konferensi
RubyRussia, Kir Shatrov akan berbicara tentang arsitektur Shopify. Bagaimana salah satu aplikasi Rails terbesar dan terberat di dunia mendukung pertumbuhan bisnis selama 10 tahun tanpa beralih ke layanan mikro, Elixir, dan alternatif populer lainnya? Dalam sebuah wawancara tradisional sebelum konferensi, Kira ditanyai oleh Anatoly Zaitsev, pengembang Evrone.
Katakan bagaimana Anda memulai karir Anda?Seperti banyak, saya pemrograman di sekolah. Saya membuat situs WordPress seharga $ 200 yang saya kenal. Saya belajar tentang Ruby on Rails dan menyadari bahwa tugas-tugas yang memakan waktu berjam-jam di PHP dapat diselesaikan lebih cepat. Tampaknya bagi saya layak melompat di kereta ini: Saya membeli buku tentang Rails dan mulai belajar langkah demi langkah. Banyak langkah tidak berhasil, dan saya meninggalkan kelas. Dia kembali setahun kemudian, mencoba membaca tutorial online, dan kemudian semuanya berhasil. Baru kemudian saya mengerti apa masalahnya: ketika buku itu sedang ditulis, diterjemahkan, dicetak dan dibawa ke toko, satu tahun atau bahkan satu tahun setengah berlalu. Rails telah banyak berubah selama ini. Secara alami, instruksi tidak lagi berfungsi. Dan ketika saya bisa membaca materi online dan dalam bahasa Inggris, saya dengan mudah memasuki Rails dan membuat proyek hobi pertama.
Lalu saya bertemu Oleg Balbekov, pendiri konferensi RailsClub, sekarang disebut RubyRusia. Jadi saya sampai di Evrone, tempat saya bekerja selama hampir empat tahun dan berkat kolega yang berkelas dan pintar, saya bisa tumbuh dengan baik. Evrone banyak membantu memulai: ada peluang untuk membuka sumber terbuka, untuk tumbuh. Kemudian saya bekerja di Evil Martians, mengerjakan proyek-proyek dengan skala berbeda - EBay, Groupon, Gett. Orang Mars memiliki budaya dan eksperimen open source yang tidak biasa, yang masih jauh dari semua tim. Di antara proyek atau langsung pada proyek, orang memiliki kesempatan untuk terlibat dalam open source. Ini adalah bagaimana ternyata mengembangkan
Autoprefixer ,
AnyCable dan tidak hanya. Akibatnya, ada sesuatu untuk diceritakan di konferensi. Saya berbicara di RailsClub di Rusia, RailsConf di Amerika Serikat dan pada sejumlah besar acara besar dan tidak terlalu penting lainnya. Dan karena saya melakukan begitu banyak, saya diperhatikan dan diundang untuk bekerja di Shopify.
Katakan bagaimana Anda pindah ke Kanada dan bagaimana Shopify membantu dalam proses ini.Ini tidak berhasil segera, ada kesulitan dengan relokasi: pada saat itu di Kanada pemerintah melakukan pemogokan dan tidak ada orang yang mengajukan atau mengalihkan visa, tetapi semuanya diizinkan. Itu 2013-2014, Shopify benar-benar kekurangan pengembang, dan mereka mulai mengangkut insinyur dari seluruh dunia ke diri mereka sendiri. Proses ini sedang berlangsung aktif sekarang. Hari ini, skalanya sedemikian rupa sehingga, bersama dengan pemerintah Kanada, Shopify telah mengembangkan sebuah program yang memungkinkan Anda untuk mendapatkan visa kerja dalam tiga minggu. Menurut skema ini, sekitar seratus orang bergerak per tahun. Pada saat yang sama, tidak hanya sumber terbuka dan pembicara terkenal yang dapat bekerja. Kami membutuhkan pengembang yang cocok dengan tim dan menulis kode yang baik.
Ternyata memasuki Shopify adalah mungkin tanpa track record yang besar, jika Anda melakukan pekerjaan Anda dengan baik dan profesional?Ya itu. Penting juga untuk dapat berbicara tentang pekerjaan Anda. Seseorang akan berkata: "Saya memperbaiki bug dan memperbarui versi Ruby, menambahkan fitur baru." Dan Anda dapat mengatakan hal yang sama, tetapi dari sudut pandang pengembangan bisnis, menyelesaikan masalahnya. Bahkan selama wawancara dengan perusahaan-perusahaan seperti itu, adalah penting inovasi apa yang Anda perkenalkan di tempat kerja, bagaimana Anda berpartisipasi dalam komunitas: tidak hanya menulis kode, tetapi, misalnya, adalah seorang sukarelawan, membantu menyelenggarakan konferensi Ruby.
Apa yang sebenarnya Anda lakukan di Shopify sekarang?Tugasnya berbeda. Tentu saja saya sedang menulis kode. Tetapi banyak waktu saya dihabiskan untuk mengatur proses. Misalnya, pada akhir November akan ada Black Friday. Untuk semua orang yang bekerja di e-commerce, ini adalah acara terbesar tahun ini. Kami mulai bersiap di bulan Agustus: kami perlu menyetujui dengan berbagai tim tentang peluncuran fitur baru, untuk setuju dengan vendor dan penyedia. Dan setelah Jumat hitam berlalu, kita memasuki fase ketika kita mulai melakukan sesuatu yang baru. Maka saya harus mengenakan topi arsitek.
Saya memutuskan sendiri bahwa saya merasa nyaman melakukan hal-hal yang berbeda dan mencoba hal-hal baru, bukan hanya menulis kode. Tapi saya tahu orang-orang yang paling suka memprogram, dan mereka tidak ingin berkomunikasi dengan peserta dari tiga puluh tim dan berpartisipasi dalam organisasi proses. Semuanya fleksibel di Shopify, di dalam perusahaan, orang dapat menemukan apa yang mereka sukai.
Shopify adalah platform yang hebat. Berapa banyak pelanggan yang Anda miliki?Angka resmi adalah 800.000 toko aktif. Ini bukan hanya pendaftaran (ada banyak lagi), ini adalah bisnis yang hidup.
Apa yang diberikan Shopify sebagai platform bagi pelanggan?Fokus kami adalah usaha kecil dan menengah. Usaha kecil seringkali hanya punya ide: mereka masih tidak tahu bagaimana mereka akan menjual. Penting untuk memecahkan banyak masalah: akuntansi untuk barang, organisasi pembayaran dan pengiriman, pemilihan mitra untuk semua ini. Tugas kita adalah untuk menghemat waktu wirausahawan sehingga mereka mengurus masalah rutin sesedikit mungkin. Kami menerima pekerjaan ini untuk diri kami sendiri.
Jika Anda tinggal di negara di mana Shopify memiliki dukungan penuh, itu artinya Anda tidak perlu memilih sistem pembayaran, karena ada Pembayaran Shopify. Cukup masukkan detail pajak Anda dan semuanya akan berfungsi. Situasi yang sama dengan mengirim barang: Anda mencetak stiker, menempelkannya pada paket dan mengirimkannya. Tidak perlu membeli merek, membayar biaya pengiriman, Shopify secara otomatis terintegrasi dengan surat. Ada layanan gudang: Anda dapat mengirim barang Anda ke gudang Shopify, dan algoritma kompleks menghitung gudang tempat menyimpannya, cara memastikan pengiriman ke pelanggan dalam satu hari. Ini memungkinkan bisnis kecil untuk bersaing dengan Amazon dan EBay.
Untuk beberapa waktu saya mengerjakan porting proyek ke platform Anda. Toko ini memiliki persediaan, barang, basis pelanggan sendiri. Semuanya bekerja dengan cukup mudah: ada ekspor / impor, bahkan pembayaran pihak ketiga terhubung dalam dua klik. Anda memiliki infrastruktur yang sangat besar. Apakah saya mengerti benar bahwa sebagian besar perpustakaan (api shopify, aplikasi shopify, shopify co) ditulis dalam Ruby dan Rails?Ya itu.
Ruby sering disalahkan karena buruknya kinerja sejumlah besar data. Saat Anda perlu mengukur, seringkali Ruby hilang. Mengapa Shopify menggunakan tumpukan teknologi khusus ini?Perusahaan dimulai dengan seorang pria bernama Toby, yang menyukai snowboards. Dua belas tahun yang lalu, ia memutuskan untuk menulis tokonya sendiri untuk penjualan papan seluncur salju ini. Dia tidak tertarik melakukan ini dalam PHP, Java dan XML. Kemudian teman David menunjukkan kepadanya kerangka kerja barunya yang keren, yang memungkinkan Anda membuat aplikasi web dengan cepat. Kerangka kerja itu bernama Ruby on Rails, dan Toby membangun toko snowboardnya sendiri di atasnya. Dia menyukai bahasa dan ide-ide kerangka kerja, Toby adalah salah satu kontributor pertama untuk Rails. Pada saat itu, Rails bahkan tidak memiliki repositori git terpusat! Orang-orang baru saja bertukar versi baru. Maka
Tobias Lutke dan
David Heinemeyer Hansson mulai mengerjakan Rails. Dan segera Toby menyadari bahwa jauh lebih keren untuk meluncurkan bukan toko snowboard Anda sendiri, tetapi seluruh platform untuk toko lain.
Tobias Lyutke adalah pendiri kami, dia masih CEO. Dia dapat ditemukan di kantor, selama lima belas tahun ini dia telah bekerja di Shopify. Perusahaan dimulai dengan Rails, dan mempekerjakan orang-orang yang dengan tulus menyukai kerangka kerja ini. Mereka melihat seberapa cepat mereka dapat membangun di Rails apa yang mereka inginkan. Mereka melihat seberapa cepat pengembang dapat melakukan sesuatu, bereksperimen dan mengirimkan ke produksi.
Saya tidak berpikir bahwa perusahaan pernah secara serius mempertimbangkan opsi untuk beralih ke sesuatu yang lain. Menurut pendapat saya, aplikasi web masih akan bersandar pada database. Pergi ke suatu tempat, ambil sesuatu, format ulang, tempel templat, letakkan di cache dan kemudian berikan hasilnya. Butuh sebagian besar waktu. Rails sangat bagus untuk merender halaman dalam 100-300 milidetik. Tentu saja, jika Anda perlu membuat 8-10, Anda harus memilih sesuatu yang lebih cepat, misalnya, Go. Perusahaan memiliki departemen yang berkaitan dengan infrastruktur, penskalaan, dan penelitian arah pertumbuhan dengan teknologi kami saat ini.
Bagaimana Anda mengatasi masalah dengan penskalaan dan beban tinggi?Kami memiliki tumpukan yang sangat khas: Rails, MySQL, Memcache, Redis. Tentunya Anda telah bekerja dengan ini di banyak proyek. Di suatu tempat di tahun 2014, ketika perusahaan berusia 10 tahun, kami menyadari bahwa semua yang kami butuhkan tidak masuk ke dalam satu basis data. Anda dapat membeli perangkat keras yang lebih kuat untuk server MySQL dan tumbuh secara vertikal, tetapi ada batasan untuk semuanya.
Kemudian kami memutuskan bahwa sharding akan membantu tumbuh secara horizontal. Seperti SaaS, di mana data dari satu toko tidak tumpang tindih dengan data yang lain, kita dapat mengatur sharding dengan cukup sederhana. Anda tidak perlu melakukan gabungan antara dua toko yang berbeda. Dengan model pecahan kami, ribuan toko dengan ukuran berbeda dan muatan berbeda hidup dengan pecahan yang sama. Shard tidak hanya mencakup esensi dari basis data, tetapi juga Redis, Memcache-nya, dan sebagainya. Karena isolasi lengkap antara pecahan, kami memecah seluruh Shopify menjadi ratusan Shopify kecil. Setiap orang dapat di-host di wilayah terpisah, pusat data, penyedia, di yurisdiksi terpisah. Jika Anda memiliki 100 pecahan, dan sesuatu jatuh pada salah satunya, itu akan mempengaruhi hanya 1% pelanggan. Ini sangat sedikit jika dibandingkan dengan situasi ketika, ketika satu sumber daya jatuh, semuanya jatuh pada semua orang.
Ini adalah penskalaan horizontal menggunakan sharding. Dan sharding tidak hanya satu, sumber daya terpenting (database), tetapi isolasi semua komponen yang digunakan toko. Masalah menarik lebih lanjut muncul. Misalnya, di beberapa beling ada lebih banyak toko, di mana ada banyak lalu lintas, tetapi di beberapa kurang. Pada beberapa lebih banyak beban, tetapi pada beberapa lebih sedikit. Kita harus menyelesaikan masalah keseimbangan toko di dalam beling.
Apakah Anda memindahkan toko dari satu beling ke beling yang lain?Ketika Anda perlu memecahkan masalah seperti itu - ya. Kami memiliki penyetelan, yang akan saya jelaskan secara rinci dalam laporan. Akan ada cerita tentang bagaimana kita sampai pada skema ini, bagaimana sharding bekerja, bagaimana pendekatan ini dapat diterapkan tidak hanya untuk bisnis kita, tetapi juga untuk orang lain. Kami sendiri harus mengembangkan alat untuk migrasi toko antara pecahan dan pusat data. Pada dasarnya, migrasi diperlukan untuk penyeimbangan kembali.
Dan kemudian itu menjadi sangat menarik. Lima tahun lalu, kami berinvestasi dalam pendekatan di mana contoh Shopify mandiri dapat dijalankan secara terpisah. Sekarang kami memiliki klien yang perlu memiliki platform di yurisdiksi tertentu. Arsitektur ini memungkinkan kita untuk membangun sebuah instance yang terisolasi hanya pada satu titik.
Yukihiro Matsumoto tiba di konferensi. Apa yang ingin kamu tanyakan padanya?Pertama, saya akan menjelaskan konteksnya sehingga pertanyaan saya lebih jelas. Sejauh yang saya tahu, pengembangan Ruby adalah beberapa individu, kurang dari sepuluh orang, di antara mereka tidak lebih dari lima kunci. Sebagian besar adalah orang Jepang yang telah melakukan ini sejak lama. Beberapa dari mereka dapat menerapkan fitur utama sendirian, seperti guild atau mengetik anotasi. Semuanya terkait dengan orang-orang ini. Dan jika satu orang yang disponsori oleh Cookpad atau Heroku mengimplementasikan fitur kunci dengan cara tertentu, maka itulah yang akan terjadi. Tetapi ada faktor bus.
Menurut pendapat saya, kemajuan terbesar di Ruby yang telah terjadi selama beberapa tahun terakhir telah diprakarsai oleh perusahaan besar, karena masalah besar tidak dapat diselesaikan sendiri. Misalnya, Stripe mempekerjakan orang yang mengembangkan bahasa pemrograman yang diketik dan memberi mereka waktu satu tahun untuk penelitian. Jadi ternyata Sorbet, yang bukan hanya metode pengecekan tipe, tetapi paradigma keseluruhan, dapat ditingkatkan, dokumentasinya didasarkan pada pengalaman ratusan orang di dalam Stripe. Dan ada banyak contoh seperti itu. Oracle mensponsori Truffle, dan beberapa orang bekerja untuk menciptakan mesin virtual generasi berikutnya, menggunakan kembali beberapa mesin virtual yang telah dikembangkan selama puluhan tahun oleh puluhan orang pintar di dalam Oracle.
Saya akan bertanya kepada Matz seberapa besar dia percaya dalam menyelesaikan masalah Ruby besar secara realistis dengan sekelompok kecil kontributor individu. Seberapa banyak model seperti itu dapat bersaing dengan contoh-contoh ketika masalah diselesaikan dengan bantuan sponsor utama.
Kami akan membahas di konferensi!Ingatlah bahwa itu akan diadakan pada tanggal 28 September di Moskow, semua rincian dan pendaftaran
di situs .
Kami didukung oleh:
Penyelenggara -
EvroneMitra Umum -
ToptalMitra Emas -
GettMitra Perak -
Valarm ,
JetBrains ,
Bookmate dan
CashwagonMitra Perunggu -
InSales