Membangun Kembali Orkestrasi Pembayaran di Airbnb
Bagaimana kami mejaga pergerakan uang yang bagus saat memindahan sistem orkestrasi pembayaran Airbnb dari aplikasi monolitik lama ke arsitektur berorientasi layanan
Sistem orkestrasi pembayaran Airbnb bertanggung jawab buat membenarkan pergerakan duit yang andal antara tuan rumah, tamu, serta Airbnb. Singkatnya, tamu wajib ditagih dalam jumlah yang pas pada waktu yang pas memakai tata cara pembayaran yang mereka seleksi; host wajib dibayar jumlah yang pas pada waktu yang pas buat tata cara pembayaran yang di idamkan. Sebab alibi historis, informasi penagihan Airbnb, API pembayaran, orkestrasi pembayaran, serta pengalaman pengguna sangat erat kaitannya dengan konsep reservasi buat menginap. Sayangnya, ini berarti kalau fitur terpaut pembayaran buat masa inap wajib dibentuk kembali buat produk lain— misalnya, Pengalaman Airbnb— serta tiap implementasi bisa jadi mempunyai Kerutinan spesial produk sendiri. Semacam yang bisa Kamu bayangkan, pendekatan ini tidak bisa diskalakan ataupun gampang dipelihara.
Sepanjang sebagian tahun, Airbnb sudah berpindah dari aplikasi Ruby on Rails monolitik kami mengarah arsitektur berorientasi layanan( SOA). Migrasi ini sudah dibahas secara luas di sebagian posting web teknologi Airbnb. Kami hendak mengabaikan sebagian dialog teknis yang universal buat migrasi tersebut serta selaku gantinya berfokus pada sebagian aspek yang unik buat memigrasikan sistem pembayaran kami. Sedangkan banyak regu di Airbnb memilah buat membuat pengganti satu- ke- satu dikala bermigrasi ke SOA, organisasi pembayaran malah memutuskan buat memakainya selaku peluang buat mendesain ulang layanan kami secara mendasar guna membagikan landasan teknis yang kokoh buat perkembangan di masa depan. Selaku konsekuensi dari keputusan ini, proses migrasi memakan waktu lebih lama buat dituntaskan daripada penggantian satu- ke- satu yang lebih gampang.
Kenapa Design diubah?
Semacam yang Brian bagikan dalam video di atas, sokongan buat pembayaran di platform sudah memainkan kedudukan berarti dalam membangun keyakinan di antara tuan rumah serta tamu Airbnb. Airbnb sudah berkembang secara signifikan semenjak sistem pembayaran awal kami terbuat lebih dari satu dekade kemudian serta, dengan perkembangan itu, cakupan serta skala pembayaran di Airbnb pula berkembang serta berganti. Banyak model pembayaran asli terpaut erat dengan reservasi buat masa inap. Ini masuk ide di masa- masa dini Airbnb sebab cuma terdapat satu produk, serta para insinyur yang bekerja di bidang pembayaran pada dikala itu melaksanakan pekerjaan yang sangat baik dalam meningkatkan pemecahan yang membongkar kebutuhan tamu serta tuan rumah. Walaupun model asli yang digunakan buat pembayaran ini teruji sangat serbaguna serta kokoh, ikatan yang erat antara masa inap serta pembayaran ini sudah menimbulkan kenaikan kerumitan dikala meningkatkan produk baru semacam Pengalaman ataupun fitur semacam Pusat Resolusi.
Dikala merancang migrasi SOA, regu pembayaran Airbnb membuat keputusan berani buat mendesain ulang sistem pembayaran secara mendasar. Tujuan kami merupakan menghasilkan platform pembayaran yang membolehkan regu di segala Airbnb dengan kilat, gampang, serta nyaman mengintegrasikan fitur serta produk baru dengan pembayaran. Tidak bisa jadi buat mencantumkan seluruh kenaikan dalam satu posting web, jadi posting ini hendak fokus pada sebagian sorotan desain yang mempengaruhi sistem orkestrasi pembayaran baru: idempotensi, platformisasi, serta kekekalan informasi.
Orkestrasi Idempoten
Semacam yang dibahas dalam posting web tadinya, idempotensi merupakan metode universal buat melindungi konsistensi di antara layanan terdistribusi. Sistem orkestrasi pembayaran baru dirancang di dekat Orpheus( kerangka idempotensi yang dipaparkan dalam posting itu). Tiap alur kerja utama dipecah jadi grafik asiklik terencana( Dekagram) dari langkah idempoten yang bisa dicoba lagi, tiap- tiap dengan sikap yang terdefinisi dengan baik. Perihal ini membolehkan susunan orkestrasi pembayaran buat mempertahankan konsistensi kesimpulannya dengan layanan utama yang lain( semacam susunan gateway pembayaran serta layanan pemenuhan produk). Pendekatan ini sudah menciptakan 5 9s( 99, 999%) konsistensi buat pembayaran.
Kerangka idempotensi bekerja dengan baik buat komunikasi sinkron serta asinkron antar layanan. Buat komunikasi asinkron, layanan pembayaran paling utama memakai bis pesan berbasis Kafka buat mengirim” kegiatan” satu sama lain. Pemroses kejadian memakai kerangka idempotensi buat tingkatkan jaminan paling tidak sekali dari Kafka jadi jaminan pas satu kali. Perlengkapan analisis integritas transaksional yang dipaparkan dalam posting ini membagikan susunan keyakinan bonus dengan membenarkan konsistensi antara kejadian serta sumber informasi transaksional.
Platform Produk Agnostic
Kelemahan signifikan dari model informasi pembayaran peninggalan kami merupakan kalau model tersebut terpaut erat dengan satu produk, reservasi buat masa inap. Buat alibi ini, layanan orkestrasi pembayaran baru kami terencana dirancang buat menjauhi penggabungan erat sistem pembayaran dengan produk tertentu. Selaku gantinya, susunan orkestrasi baru dirancang di dekat alur kerja khusus pembayaran universal( misalnya, validasi, pemrosesan pembayaran, pelaporan keuangan) dengan logika khusus pembayaran serta logika khusus produk yang diisolasi satu sama lain, dengan pengecualian sebagian integrasi yang terdefinisi dengan baik. poin. Kala dikombinasikan dengan API penagihan serta harga generik yang dipaparkan dalam posting web ini, pendekatan ini membolehkan produk baru buat berintegrasi dengan kilat serta gampang dengan aliran pembayaran generik yang terdapat, secara ekstrem kurangi upaya rekayasa serta waktu pengiriman. Tidak hanya itu, sebab fitur baru ditambahkan ke sistem pembayaran, fitur ini bisa dengan gampang diadopsi oleh produk lain.
Kekekalan Data
Informasi yang tidak bisa diganti lebih gampang buat dimengerti, diaudit, serta direkonsiliasi. Seluruh layanan pembayaran baru dibentuk di dekat gagasan kekekalan informasi. Buat orkestrasi pembayaran, kekekalan informasi bermanifestasi dalam 2 wujud utama: kejadian persisten serta pembuatan tipe. Kegiatan secara natural cuma meningkatkan. Ialah tanggung jawab konsumen kegiatan buat memastikan apakah kegiatan baru mewakili modifikasi kegiatan yang telah terdapat. Kala produk yang terdapat diganti( misalnya, meningkatkan satu malam lagi buat masa inap), modifikasi pada rencana orkestrasi pembayaran dimodelkan selaku tipe baru dalam urutan rencana buat produk tersebut. Data gabungan dari seluruh tipe membagikan riwayat lengkap tentang pergerakan duit yang dimaksudkan serta aktual yang terpaut dengan produk tersebut.
Migrasi Bertahap
Bermacam regu di Airbnb mengambil pendekatan berbeda buat migrasi mengarah arsitektur berorientasi layanan( SOA). Banyak regu memilah buat memigrasikan fungsionalitas dalam blok- blok kecil, mengambil alih implementasi lama dengan implementasi SOA yang setara. Biasanya, dengan pendekatan ini, sistem yang terdapat hendak dipecah jadi blok- blok fungsional yang terpisah, kohesif. Tiap blok bisa dimigrasikan sebagian besar secara independen dari yang lain. Sikap tiap blok hendak didefinisikan dengan baik serta hasilnya bisa dibanding dengan gampang di kedua sistem buat membenarkan hasil yang tidak berubah- ubah.
Organisasi pembayaran Airbnb mengambil pendekatan berbeda buat migrasi bermacam sistem pembayaran. Alih- alih blok fungsional kecil, migrasi buat sistem pembayaran dipecah jadi 4 fase utama: Penetapan Harga, Pembayaran, Pemesanan, serta Migrasi Informasi. Fase Penetapan Harga merombak tiap model penetapan harga spesial produk jadi model universal yang bisa digunakan di seluruh produk Airbnb. Fase Pembayaran serta Pemesanan secara mendasar mendesain ulang metode pergerakan duit diatur di Airbnb supaya lebih gampang menunjang produk, fitur, serta kebutuhan bisnis baru. Sebagian besar pekerjaan yang terpaut dengan orkestrasi pembayaran tercantum dalam fase- fase ini. Fase Migrasi Informasi memigrasikan pemesanan yang terdapat dari sistem lama ke SOA, membolehkan sistem lama dihentikan serta tidak digunakan lagi.
Dalam tiap fase, migrasi dipecah jadi migrasi yang lebih kecil, umumnya bersumber pada fitur ataupun produk. Misalnya, dalam fase Pemesanan, pemesanan buat masa inap dimigrasikan secara terpisah dari pemesanan buat pengalaman. Bila masuk ide, subfase tersebut pula dipecah lebih lanjut. Migrasi pemesanan buat masa inap dipecah jadi lebih dari 30 pencapaian bersumber pada ciri pemesanan. Cakupan yang relatif kecil dari tiap pencapaian membolehkan para insinyur serta ilmuwan informasi buat menguji serta memvalidasi tiap rangkaian migrasi secara merata. Tidak hanya itu, watak tiap- tiap tonggak yang relatif independen membolehkan banyak dari mereka buat dituntaskan secara paralel.
Memelihara 2 Sistem
Sistem orkestrasi pembayaran yang baru memperkenalkan model informasi yang didesain ulang secara fundamental bersumber pada konsep tagihan. Tidak semacam model lama, model informasi baru tidak terikat pada produk tertentu, namun lebih berfokus buat jadi lumayan kokoh, bisa diperluas, serta generik supaya bermanfaat untuk produk Airbnb yang terdapat serta yang hendak tiba. Salah satu konsekuensi berarti dari mendesain ulang model informasi pembayaran secara mendasar merupakan konversi dari satu model informasi ke model informasi yang lain jadi tidak gampang.
Secara umum, pemesanan dan pembayaran historis tidak dipindahkan dari satu sistem ke sistem lain sebagai bagian dari proses migrasi awal. Sebaliknya, pemesanan dan pembayaran baru akan dialihkan ke SOA jika dianggap memenuhi syarat. Jika tidak, mereka akan terus dialihkan ke sistem lama. Sepanjang sebagian besar proses migrasi, pemesanan yang ada akan terus berlanjut melalui siklus hidupnya dalam sistem monolitik lama. Hanya di akhir migrasi, pemesanan aktif dialihkan dari sistem lama ke SOA. Akibatnya, tim teknik perlu mempertahankan dua sistem orkestrasi pembayaran paralel di seluruh proses migrasi secara virtual.
Sebagian besar konsumen data pembayaran sebenarnya tidak peduli apakah data tersebut disimpan dalam sistem lama atau SOA; mereka hanya ingin datanya. Untuk memberikan pengalaman yang mudah dan konsisten untuk layanan klien tersebut, lapisan transformasi baru dibangun untuk mengambil data secara transparan dari sumber dasar yang benar dan untuk mengubahnya dengan mulus menjadi model data terpadu yang dapat digunakan oleh semua klien. Lapisan terjemahan terbukti sangat berharga karena memisahkan pekerjaan tim yang mengerjakan migrasi dari pekerjaan tim klien.
Tidak ada yang terjadi dalam ruang hampa. Sementara migrasi sedang berlangsung, kebutuhan bisnis muncul dan fitur harus ditambahkan ke sistem orkestrasi pembayaran. Untuk setiap fitur, tim harus memutuskan apakah perubahan harus diterapkan hanya dalam satu sistem atau keduanya. Dalam banyak kasus, ini menyebabkan pekerjaan dua kali lebih banyak untuk mempertahankan pengalaman pengguna yang konsisten di kedua sistem. Dalam kasus lain, fitur hanya ditangguhkan atau didesain ulang untuk menghindari duplikasi usaha.
Akhirnya, perhatian khusus harus diberikan untuk memastikan bahwa kedua sistem berperilaku seperti yang diharapkan tamu dan tuan rumah kami. Idealnya, tamu dan tuan rumah bahkan tidak akan melihat perbedaan selain dari beberapa peningkatan kinerja. Alat dan alur kerja tambahan dibuat untuk memastikan bahwa duta dukungan Airbnb terus memberikan pengalaman yang konsisten bagi tamu dan tuan rumah kami terlepas dari sistem mana yang digunakan untuk mengatur pembayaran.
Salah satu pembelajaran utama dari pengalaman ini adalah betapa pentingnya berkomunikasi dengan semua pemangku kepentingan untuk memastikan bahwa setiap orang selaras dengan garis waktu, kendala, dan prioritas. Mempertahankan dua sistem paralel dalam jangka waktu yang lama menciptakan banyak overhead dan memperlambat kecepatan iterasi untuk fitur baru. Sangat penting untuk memastikan bahwa organisasi yang lebih luas diselaraskan pada timeline sehingga tim produk tidak perlu diperlambat oleh pekerjaan tak terduga yang terkait dengan sistem yang dimigrasikan sebagian. Membagi migrasi menjadi beberapa fase membantu mengurangi waktu selama tim terkena dampak.
Komitmen untuk Kerajinan
Mungkin bagian terpenting dari proses migrasi adalah memastikan bahwa sistem baru dibangun dengan mempertimbangkan Komitmen terhadap Kerajinan Airbnb dan divalidasi secara menyeluruh sebelum diluncurkan. Tim insinyur penjaminan kualitas yang berdedikasi melakukan pengujian manual yang komprehensif terhadap ratusan skenario untuk membantu memastikan konsistensi dengan sistem lama di seluruh spektrum kasus penggunaan yang luas. Selain itu, serangkaian pengujian unit yang ekstensif, pengujian integrasi yang dangkal, dan pengujian integrasi ujung-ke-ujung dibuat di seluruh organisasi teknik pembayaran untuk memastikan perilaku yang benar dari aliran pembayaran utama. Sebagai perlindungan tambahan, bila memungkinkan, pekerjaan “pertandingan” asinkron akan membandingkan model data baru dan model data lama untuk memvalidasi bahwa kedua jalur kode menghasilkan hasil yang konsisten.
Kesimpulan
Sistem pembayarannya rumit. Meluangkan waktu untuk mendesain ulang sistem dengan cermat dapat menghasilkan peningkatan dalam pemeliharaan, ekstensibilitas, kinerja, dan ketahanan. Namun, ada juga kerugian yang patut dicatat dari proses migrasi yang berumur panjang. Proses tersebut dapat menyebabkan ketidakpastian di antara klien layanan dan menghabiskan sumber daya yang mungkin dihabiskan untuk membuat fitur baru atau mengoptimalkan aliran yang ada. Beberapa kekhawatiran ini dapat dimitigasi dengan membagi migrasi menjadi pencapaian yang lebih kecil dan terdefinisi dengan baik dan memastikan komunikasi reguler dengan pemangku kepentingan. Rencana pengujian dan validasi yang menyeluruh sangat penting untuk memastikan bahwa layanan baru dapat menggantikan sistem lama dengan mulus. Dengan mengikuti pendekatan ini, kami dapat meluncurkan sistem orkestrasi pembayaran baru yang lebih cepat, lebih mudah dirawat, dan dapat lebih mudah mendukung produk, fitur, dan kebutuhan bisnis baru.
Tonton rekaman pembicaraan teknologi Make Money Moves untuk diskusi lebih mendalam tentang migrasi layanan pembayaran ke SOA.
Jika jenis pekerjaan ini menarik minat Anda, lihat beberapa posisi terkait kami:
Insinyur Perangkat Lunak Senior, Pembayaran (San Francisco atau Seattle)
Staf Insinyur Perangkat Lunak, Pembayaran (San Francisco atau Seattle)
Manajer, Kepatuhan Pembayaran Teknik (Bangalore, India)
Insinyur Perangkat Lunak Senior, Kepatuhan Pembayaran (Bangalore, India)
Staf Insinyur Perangkat Lunak, Kepatuhan Pembayaran