Nikita Galushko, pengembang divisi Toko Online Lamoda, saat mengunjungi pusat pelatihan Slurm, berbagi kesannya tentang kursus Kafka, menceritakan bagaimana teknologi ini digunakan dan masalah apa yang diselesaikan di departemen R&D (Penelitian dan Pengembangan).
"Seberapa cepat kita akan mencapai saluran jaringan yang digunakan Kafka - dalam dua tahun atau kurang?"
Lamoda adalah salah satu toko online terbesar di Rusia dan CIS. Agar pembeli dapat menggunakan situs ini tanpa masalah dan menikmati pengiriman dan pengiriman cepat, 340 karyawan terlibat dalam sistem TI di Lamoda: pengembang, insinyur QA, analis, spesialis DevOps, manajer produk, desainer. Mari kita cari tahu bagaimana roda berputar dalam sistem ini.
Ceritakan ke saya tentang dirimu. Apa yang Anda lakukan di Lamoda dan sudah berapa lama Anda bekerja di sana?
Bagaimana saya suka mengatakan: "Saya menekan tombol, dan mereka membayar saya uang untuk itu." Saya telah menekan tombol selama sekitar enam tahun sekarang. Selama ini saya menulis di Go. Saya telah berada di Lamoda belum lama ini, sejak Oktober 2020, tetapi saya telah berhasil melepaskan tentakel saya di banyak proyek layanan.
Saya bekerja di departemen RnD (Penelitian dan Pengembangan) - ini adalah departemen di mana satu minggu Anda menulis layanan di Kafka dan memutuskan cara melakukan transaksi terdistribusi antara Kafka dan PostgreSQL, dan berikutnya Anda menulis generator kode untuk Aerospike. Ini pekerjaan yang sangat menarik.
Apakah saya memahami dengan benar bahwa R&D sangat terkait dengan analitik?
Ya, kami bekerja sama dengan ilmuwan data. Mereka melakukan analitik, melatih dan membangun model, dan kemudian mendatangi kami dengan permintaan untuk menyematkan model ini ke dalam pengoperasian aplikasi atau situs web. Misalnya, model yang menunjukkan kepada pengguna daftar rekomendasi yang dipersonalisasi atau menyarankan ukuran pakaian atau alas kaki yang paling mungkin cocok untuk pelanggan.
Tugas apa yang Anda sukai dari pekerjaan Anda? Apa yang menarik bagi Anda di departemen R&D?
Ini mungkin kebebasan. Anda tidak terbatas pada satu domain pengetahuan, layanan, atau sekumpulan kecil layanan. Di R&D, Anda dapat membuat perubahan pada layanan di Go, dan hari berikutnya, ubah di Java. Untuk beberapa, ini mungkin merugikan, karena dengan pendekatan ini sulit untuk fokus pada satu layanan. Tetapi bagi saya ini adalah kesempatan untuk mencoba tangan saya di berbagai bidang, melihat pendekatan apa yang digunakan pengembang untuk memecahkan masalah yang berbeda, mempelajari sesuatu yang baru untuk diri saya sendiri.
Kami baru-baru ini mulai membuat generator kode untuk mengurai hasil Aerospike. Karena dia memberikan data mentah, Anda terus-menerus harus menguraikannya secara manual. Dan ini adalah potensi kesalahan dan pemborosan waktu yang berharga: Anda lupa sesuatu atau tidak memeriksa sesuatu, dan hasilnya tidak seperti yang Anda harapkan. Oleh karena itu, kami memikirkannya dan memutuskan untuk menulis pembuat kode kami sendiri. Sejauh ini, ini berfungsi dalam mode uji, tetapi saya berharap segera kami akan membukanya.
Apakah Lamoda sering mengerjakan proyek open source?
Lamoda memiliki proyek open source yang relatif terkenal bernama Gonkey . Anda dapat membaca lebih lanjut tentang itu di artikel kami .
Gonkey adalah kumpulan solusi standar yang memudahkan penulisan autotest dalam bahasa markup Yaml. Ini nyaman karena tes semacam itu dapat ditulis oleh pengembang dan penguji, sehingga meningkatkan persentase cakupan tes.
Sekarang alat ini tidak berkembang secepat yang kami inginkan di dalam perusahaan, tetapi kami berencana untuk menyumbangkan lebih banyak waktu untuk alat ini di masa mendatang: tutup paket yang terbuka di github, jawab pertanyaan, perbaiki.
Kemungkinan besar, untuk ini Anda perlu memiliki banyak pengetahuan, untuk belajar dua kali lebih banyak dari biasanya. Begitu?
Saya akan mengatakan bahwa Anda hanya perlu memiliki pandangan yang luas.
Dangkal?
Tentu tidak seperti itu. Ada yang namanya pengembang bentuk-T. Ia memahami dengan sangat baik, bahkan sangat baik, dalam satu bidang, tetapi pada saat yang sama ia kurang lebih berpengalaman dalam sejumlah bidang lainnya. Saya sudah mengatakan bahwa sekarang saya menulis di Java, tetapi masih 99% kode yang saya tulis di Go. Oleh karena itu, ketika Anda mengetahui tumpukan Go dengan sangat baik dan pada saat yang sama mengetahui cara melihat-lihat, ini bagus tidak hanya saat bekerja di R&D, tetapi secara umum. Anda dapat mempelajari beberapa ide dan pendekatan dari teknologi dan bahasa lain.
Saya mengenal orang-orang yang menulis dengan Python untuk beberapa waktu dan kemudian beralih ke Go - mereka menyukai bagaimana bahasa ini mendekati penanganan kesalahan. Sekarang mereka mencoba membawa pendekatan yang sama ke proyek yang menulis dengan Python.
Mungkin, setiap pengembang yang ingin mengembangkan tidak punya pilihan lain - Anda perlu meningkatkan di area yang berbeda. Anda tidak akan bisa duduk selamanya untuk memahami hanya satu bidang yang sangat terspesialisasi. Jika Anda bekerja di mana saja, maka Anda perlu berkembang.
Seperti yang saya pahami, tugas dalam R&D itu beragam. Apakah Anda harus mempelajari sesuatu dalam prosesnya?
Belajar dan pengembangan dengan saya, sejak saya berkenalan dengan pemrograman di kelas 10 kamar bacaan. Saya merasa senang ketika saya mempelajari sesuatu yang baru atau ketika saya memberi tahu orang lain tentang sesuatu yang baru. Sebelum Lamoda, saya mengerjakan VKontakte dan mengembangkan dengan cara yang sama, membaca artikel, mengikuti kursus, menonton pidato dari konferensi.
Saya tidak mendesak untuk lari membaca buku dan tanpa pamrih berkembang - semua orang memutuskan sendiri. Bahkan jika Anda mengambil contoh dari salah satu karya saya sebelumnya: kami menulis semuanya di Go, dan secara paralel saya melihat ke arah Rust. Saat itu belum begitu populer, dan artikel tentang topik "Pergi versus Rust" dari masa-masa itu sangat menarik bagi saya. Pada saat yang sama, saya tidak membutuhkannya untuk bekerja.
Jika kita berbicara tentang bekerja di Lamoda, apa yang perlu Anda tingkatkan selama setahun terakhir, selain Kafka?
Bekerja dengan Kubernetes dan menulis diagram helm. Ngomong-ngomong, saya mengambil kursus Kubernetes dengan Anda, karena saya belum pernah bekerja dengannya sebelumnya. Biasanya ini adalah mesin virtual atau perangkat keras fisik, dan semuanya melalui admin, atau Anda sendiri memiliki akses untuk meluncurkan paket deb. Oleh karena itu, saya harus menguasai Kubernetes: bukan pada level "melalui kubectl untuk melihat status pod-a", tetapi pada level penulisan helm chart dengan benar dan memahami cara kerjanya di dalamnya.
Sementara kita membahas topik kursus, mari kita bicara tentang Kafka. Mengapa Anda mengambil kursus Kafka?
Saya melihat spanduk di situs web: " Kursus Kafka segera hadir ." Dan saya berpikir: "Kita harus pergi!"
Seperti yang saya sebutkan, saya suka mempelajari hal-hal baru. Anda tidak perlu berada di dahi tujuh inci untuk mengirim atau membaca pesan di Kafka pada tingkat minimum. Namun secara umum Lamoda Kafka telah digunakan sejak lama dan tegas. Oleh karena itu, mendalami teknologi ini tidak bisa dihindari bagi saya.
Apa Kafka untukmu?
Bagi saya, ini adalah log terdistribusi dan toleran terhadap kesalahan dengan antarmuka interaksi sederhana yang dapat memompa data dalam jumlah sangat besar melalui dirinya sendiri.
Bagaimana Kafka digunakan di Lamoda?
Bagi saya, menemukan layanan yang entah bagaimana tidak menggunakan Kafka di Lamoda sangat sulit. Kami telah menerapkan event-bus di atasnyaApakah bus acara seperti itu untuk seluruh Lamoda. Seseorang menulis beberapa acara, dan peserta lain yang terhubung ke bus ini dapat membacanya dan bereaksi terhadapnya.
Jika kita berbicara tentang proyek baru, baru-baru ini kami meluncurkan layanan untuk mengumpulkan data analitik dari backend xlog (ini adalah nama internalnya). Juga melalui Kafka, karena membutuhkan throughput yang tinggi dari seluruh sistem.
Kafka juga diperlukan untuk bekerja dengan ClickHouse, yang memiliki mesin Kafka. Artinya, kami hanya menulis ke Kafka, dan ClickHouse membaca dan menulis data untuk dirinya sendiri. Ini sangat nyaman, karena kami sedang mengerjakan salah satu proyek di mana Anda perlu melakukan banyak entri di ClickHouse dan sering. Dan seperti yang kita ketahui, ClickHouse tidak tahu bagaimana melakukan ini dengan baik di luar kotak - ia membutuhkan proxy yang sesuai. Sekarang pasar memiliki solusi dari Yandex dan VKontakte, tetapi karena Lamoda sudah memiliki keahlian yang baik di Kafka, kami memutuskan untuk menggunakannya untuk berkomunikasi dengan ClickHouse.
Kami juga secara aktif menggunakannya untuk semua jenis analitik.
Bagaimana tim R&D menggunakan Kafka? Jika Anda mengatakan bahwa Kafka adalah log untuk Anda, apakah saya memahami dengan benar bahwa Anda sedang mengembangkan layanan yang menggunakannya, yaitu, Anda bekerja dengan Kafka Streams?
Kami memiliki pembungkus sendiri di atas perpustakaan untuk bekerja dengan Kafka, yang menyediakan semacam abstraksi. Namun nyatanya, Go memiliki saluran: pengembang membaca dari saluran tersebut dan menulis di sana. Mereka bahkan mungkin tidak memikirkan apakah itu Kafka atau bukan.
Masalah apa yang Anda dan tim Anda hadapi dengan Kafka? Bagaimana Anda mencoba menyelesaikannya?
Sekarang kita memiliki pertanyaan, seberapa cepat kita akan mencapai saluran jaringan yang digunakan Kafka - dalam dua tahun atau lebih awal? Dan di balik itu, muncul pertanyaan lain: kompresi apa yang harus diaktifkan dan untuk topik apa di Kafka untuk menunda cerita ini?
Secara konvensional, layanan pengumpulan data analitik yang sama adalah kandidat pertama untuk kompresi. Tapi kita tidak bisa begitu saja mengambil dan mengaktifkan kompresi, karena ini adalah semacam pertukaran antara penggunaan CPU pada produsen dan konsumen.
Sekarang saya mencoba menyiapkan dokumen dengan tes dan analisis. Ngomong-ngomong, kursus Anda banyak membantu saya dalam hal ini, karena ada pelajaran terpisah tentang cara benchmark Kafka. Dalam dokumen ini, saya ingin merefleksikan apakah sekarang ada kebutuhan untuk mengaktifkan kompresi pada layanan ini. Kalau begitu, mana yang akan dimasukkan, karena ada algoritma kompresi yang berbeda. Bagi saya ini adalah topik yang paling jelas untuk perbaikan.
Apakah saat ini ada masalah pembakaran dengan Kafka?
Ketika kami mengatur ClickHouse untuk bekerja dengan Kafka, ada masalah yang hak untuk mendeskripsikan dalam grup yang kami gunakan tidak diatur dengan benar.
Ini terlihat kurang menakutkan daripada rencana untuk mengalami bandwidth.
Saya juga akan bertanya kepada Anda tentang apa yang baru-baru ini saya pelajari. KIP500 dirilis dari Kafka 2.8 untuk meninggalkan ZooKeeper. Dan seperti yang saya pahami, Kafka bertumpu pada keberadaan ZooKeeper, keterbatasannya. Mereka berjanji jika Zookeeper ditinggalkan, jumlah partisi akan meningkat menjadi dua juta. Apakah ini entah bagaimana menyelesaikan masalah Anda?
Jika Anda menjawab secara langsung, maka tidak, itu tidak menyelesaikan, karena kami tidak menjalankan pekerjaan Kafka, tetapi pada saluran jaringan yang kami gunakan sebelumnya. Dia dengan mudah mengatasi jumlah data yang kami kirimkan kepadanya - saluran tidak berubah dari ini.
Jika kita berbicara tentang KIP500, maka mereka mengambil langkah pertama untuk meninggalkan Zookeeper, tetapi sejauh ini tampaknya solusi tersebut tidak dapat diandalkan: mungkin tidak ada gunanya meninggalkan Zookeeper secara tiba-tiba dan beralih ke 2.8 untuk beberapa sistem produksi yang memuat lebih banyak atau lebih sedikit.
Intinya adalah bahwa ops biasanya berurusan dengan Kafka, dan mereka perlu memahami bagaimana menyelesaikan masalah yang muncul. Sekarang mereka tahu: jika sesuatu terjadi, mereka harus melakukan sesuatu yang spesifik di Kafka, dan di ZooKeeper sesuatu yang lain. Dan ketika dia tidak ada di sana, rencana untuk memecahkan masalah tidak berhasil, dan Anda harus mengembangkan keahlian dalam masalah ini.
Saya mengerti dengan benar: Anda mengalami jaringan dan skala horizontal Kafka tidak membantu, yaitu, apakah itu hanya masalah jaringan?
Secara umum, Kafka dibuat sedemikian rupa sehingga Anda akan memasuki jaringan atau sesuatu yang lain, tetapi tidak performanya. Saya ingat persis apa yang dikatakan tentang hal ini dalam kursus, dan para guru menjelaskan secara rinci mengapa demikian. Tetapi kami tidak akan membicarakan hal ini sehingga mereka yang tertarik dapat pergi dan menonton kursus.
Pada tugas besar, semuanya jelas - bandwidth. Dan untuk mengatasi masalah ini, Anda pergi ke kursus untuk menghiburnya dan membawa sesuatu untuk tim. Apakah ini kebetulan atau sengaja terjadi?
Kebetulan, karena saya awalnya menonton kursus, bukan hanya belajar menulis di Kafka. Memang, untuk replikasi yang baik dan benar, Anda perlu mengatur tindakan yang benar. Kursus ini membawa Anda ke bagian dalam sistem dan cara kerjanya.
Jika kita berbicara tentang suatu kursus, maka tidak ada pembagian menjadi pengembang dan admin. Apakah Anda memeriksa semua topik atau menelusuri admin?
Saya membahas semua topik karena semuanya menarik bagi saya. Saya sangat senang mempelajari hal-hal baru. Biasanya saya membuat catatan, dan setelah beberapa saat saya kembali ke catatan ini, membaca ulang, membuang sesuatu. Jika ada yang tidak jelas, saya akan merevisi bagian kursus dan menulis ulang bagian sinopsisnya.
Sudahkah Anda melakukan magang? Apakah sulit bagi Anda untuk menerapkannya, terutama yang bersifat admin?
Saya berhasil, tapi belum semuanya. Tidak, semuanya direncanakan dengan cukup baik, bagaimana dan apa yang perlu dilakukan dan hasil apa yang diharapkan. Itu menarik bagiku.
Pertama, aplikasi Java digunakan untuk beberapa kerja praktek. Saya tertarik untuk tidak hanya melakukan pekerjaan ini, tetapi menghabiskan beberapa waktu mempelajari kode di Java yang bekerja dengan Kafka. Anda perlu melihat sedikit lebih dalam dan lebih luas saat Anda menjalani tugas-tugas praktis semacam itu.
Artinya, Anda sedang melihat teknologi.
Iya. Saat saya mengerjakan partisi, ini tentang replikasi. Dan saya berpikir, apa yang akan terjadi jika saya melakukannya dengan sedikit berbeda. Saya meluangkan waktu untuk bermain-main dan memeriksa apa yang terjadi jika saya mematikan satu node? Dan jika dua? Bagaimana jika saya melakukan sesuatu yang lain? Ada baiknya ada pendirian untuk latihan, Anda tidak perlu mengangkat apa pun dari diri Anda sendiri. Tidak perlu membuang waktu untuk ini.
Beri tahu kami apa yang paling menarik bagi Anda? Apa yang Anda temukan tentang itu, mengapa Anda sangat terkejut?
Misalnya, ternyata Kafka adalah in-memory queue. Kami terbiasa dengan fakta bahwa database tidak hanya menulis ke disk, tetapi juga memanggil fsync sehingga sistem operasi memindahkan data ke disk. Karena hanya memanggil tulis tidak menjamin bahwa data akan ditulis.
Kafka tidak melakukan ini: itu hanya memanggil tulis, panggilan sistem, dan hanya itu. Dia hanya berkata: "Anda adalah sistem operasinya, Anda memutuskan kapan akan meresetnya." Dan faktanya, keandalan Kafka dijamin melalui replikasi. Saya tidak tahu hal itu. Saya pikir Kafka memanggil fsync dan dengan jujur ββmenyimpan semua data ke disk. Begitulah liciknya dia.
Menarik juga untuk mendengar permasalahan dari beberapa pusat data.
Tugas bandwidth Anda. Apa yang berhasil Anda ambil dari kursus untuk memenuhi tantangan masa depan?
Bagaimana mengukur kinerja Kafka dan bagaimana cara kerjanya dengan data terkompresi. Kafka tidak membuka kompresinya, tetapi menulisnya ke disk dan memberikannya kepada konsumen sebagaimana adanya. Ini memperjelas bahwa perlu untuk melihat biaya CPU tidak hanya pada produsen yang menulis di Kafka, tetapi juga pada konsumen yang membacanya. Nah, dan bagaimana cara melakukan benchmark dengan benar.
Atau mungkin ada sesuatu yang sulit dalam kursus tersebut bagi Anda? Atau apakah latihannya sangat sulit?
Persis seperti itu: Saya menonton beberapa video beberapa kali. Direvisi persis tentang penyeimbangan kembali kelompok konsumen. Dari tampilan pertama, tidak sepenuhnya jelas bagaimana ini terjadi. Saya tidak berbicara tentang penyeimbangan ulang sederhana, tetapi tentang penyeimbangan ulang. Ini harus direvisi dan dibaca ulang.
Topiknya sendiri kompleks. Anda menonton video dan tampaknya jelas dari jarak jauh, tetapi Anda ingin memahami semua proses dengan jelas, jadi Anda perlu merevisi. Hanya duduk dengan pensil untuk menggambar - kemudian Anda menyadari bahwa semuanya tampak menjadi jelas.
Dan sebagai kesimpulan saya akan bertanya: apa yang Anda miliki dalam rencana Anda untuk pelatihan dan pekerjaan?
Saya mulai ngeblog. Saya membeli domain dan meningkatkannya menjadi DigitalOcean secara gratis - mereka mendistribusikan konten statis secara gratis. Blogging memberi saya insentif untuk mempelajari sesuatu, menuliskannya, dan membagikannya dengan orang lain. Anda memahami topik ketika Anda dapat menceritakannya kepada seseorang sehingga dia juga mengerti.
Dan blog hanya memberikan keterampilan menceritakan kembali. Sekarang saya berurusan dengan efisiensi indeks GIN. Sebentar lagi akan ada artikel tentang topik ini, yang didasarkan pada pembicaraan tentang GolangConf tahun lalu.
Anda selalu perlu mencari diri sendiri: jika Anda memiliki kekuatan, mengapa tidak membaca artikel tentang cara kerja Go.