Rumah > Java > javaTutorial > teks badan

Perkara tegar: perjalanan pembinaan semula lebih daripada 30,000 baris kod dalam sistem teras

Lepaskan: 2023-07-26 15:48:11
ke hadapan
1404 orang telah melayarinya
Terdapat petikan ini dalam buku klasik "Pemfaktoran Semula":
Pada mulanya, pemfaktoran semula yang saya lakukan adalah mengenai perincian. Apabila kod menjadi lebih ringkas, saya dapati bahawa saya dapat melihat beberapa perkara peringkat reka bentuk yang saya tidak faham sebelum ini Tanpa pemfaktoran semula, saya tidak akan dapat mencapai tahap ini.
Pemfaktoran semula sememangnya satu perkara yang menarik untuk pengaturcara.
Pada awal tahun ini, pasukan kami menyelesaikan pembinaan semula projek yang kompleks, yang merupakan bahagian enjin teras sistem pengiklanan Ia mempunyai kira-kira 300 fail dan lebih daripada 30,000 baris kod.
Hanya mengambil masa kira-kira 1 bulan dari reka bentuk penyelesaian teknikal hingga pelancaran skala penuh terakhir, dan tiada kemalangan yang berlaku.
Ini sepatutnya menjadi projek pemfaktoran semula terbesar dan paling berjaya yang pernah saya alami dalam kerjaya pengaturcaraan 8 tahun saya: kelajuannya cukup pantas, rancangannya komprehensif, dan kualitinya boleh diterima.

01 Mari kita bercakap tentang bagasi sejarah enjin pengiklanan sistem ini melalui satu setengah tahun lelaran sebelum pembinaan semula ini. perniagaan tunggal dan proses yang jelas.

Bermula pada tahun 2019, perniagaan pengiklanan syarikat mula berkembang pesat, dengan hasil meningkat hampir dengan pesat. Dalam proses ini, enjin pengiklanan kami menghadapi dua cabaran:

1. Senario perniagaan mula menjadi kompleks Selain pengiklanan carian, ia juga perlu menyokong pengesyoran aliran maklumat dan senario pengesyoran yang serupa.

2. Trafik pengiklanan mula meningkat dengan cepat Selain memenuhi keperluan fungsi, ia juga perlu mengambil kira prestasi.

Selepas menyusun, kebanyakan logik keseluruhan enjin boleh dikongsi, jadi kami menentukan rangka kerja utama dan mengabstrak bahagian yang boleh dipanjangkan. Dengan cara ini, setiap senario boleh melaksanakan antara muka awam tertentu mengikut kekhususan perniagaannya sendiri. Di samping itu, dari perspektif prestasi, kami mengorbankan beberapa kebolehbacaan kod dan menyelaraskan beberapa logik.

Dengan perkembangan perniagaan, senario carian mula memasuki tempoh lelaran pesat, dengan semakin banyak strategi baharu ditambah, dan rangka kerja utama kami beransur-ansur menjadi tidak fleksibel pada masa ini.

Jika anda menukar bingkai utama, adegan selain daripada carian perlu dibina semula dengan sewajarnya. Dalam tempoh perkembangan perniagaan yang pesat, jadual pembinaan tidak dibenarkan sama sekali, jadi kami hanya boleh menjalankan pembangunan tampalan pada rangka kerja sedia ada. Ini membawa dua masalah yang jelas:

1. Untuk serasi dengan logik khas carian, kita perlu menambah pelbagai jika pertimbangan dalam senario lain untuk memintas logik ini.

2 Terdapat lebih banyak strategi pengiklanan, berpuluh-puluh jumlah keseluruhannya Apabila rangka kerja kehilangan struktur yang jelas, pelaksanaan beberapa strategi mula menjadi tersuai, tiada pembahagian hierarki dan reka bentuk abstrak yang boleh dipasang.

Dalam konteks ini, dengan pengumpulan perubahan, kod mula menyimpang daripada niat asal reka bentuk, dan hutang teknikal menjadi semakin berat. Walau bagaimanapun, kami tidak dapat mencari masa yang sesuai untuk memfaktorkan semula.
Perkara tegar: perjalanan pembinaan semula lebih daripada 30,000 baris kod dalam sistem teras

Titik perubahan berlaku pada penghujung tahun 2019. Disebabkan kekhususan perniagaan pengiklanan, trafik mula merosot secara semula jadi, pasukan operasi produk menumpukan pada perancangan kerja untuk tahun kedua , yang memberi kami banyak bantuan Tempoh tingkap yang baik untuk memulakan pembinaan semula ini.

Kami menetapkan tempoh pembinaan kepada 1 bulan, dan akhirnya hanya dalam talian lewat sehari daripada yang dijangkakan Walaupun dua masalah dalam talian berlaku, ia ditemui dan dibaiki dalam masa dalam tempoh skala kelabu, dan tiada masalah luar talian telah disebabkan.

Secara umum, ini adalah projek pemfaktoran semula yang sukar dan agak berjaya Mari kita bercakap tentang pengalaman berharga yang saya pelajari daripada projek ini secara terperinci.

02 Apakah persediaan yang telah kita lakukan sebelum pemfaktoran semula?

Jumlah kod yang difaktorkan semula kali ini adalah sangat besar, lebih daripada 30,000 baris, dan ia merupakan bahagian enjin teras sistem pengiklanan. Sebelum pelancaran, kita boleh menjangkakan kesukaran berikut:

1 Ketahanan dari segi perniagaan: Pengiklanan sangat berorientasikan perniagaan, Walau bagaimanapun, penstrukturan ini boleh membawa kecekapan jangka panjang tidak dapat meningkatkan pendapatan perniagaan secara langsung, dan kitaran pembangunan tidak akan terlalu singkat. Bagaimanakah kita boleh mendapatkan sokongan daripada rakan sekelas perniagaan?

2. Kebimbangan teknikal: Sebaik sahaja pemfaktoran semula menyebabkan kemalangan dalam talian, syarikat itu mempunyai sistem penalti. Pada masa yang sama, jika terdapat lelaran perniagaan yang sangat berat yang diselang-seli semasa proses pembinaan semula, tiada siapa yang boleh menjamin masa penghantaran, dan ia akan menjadi sukar untuk mengawal kualiti.

Perkara tegar: perjalanan pembinaan semula lebih daripada 30,000 baris kod dalam sistem teras

Sebagai tindak balas kepada kebimbangan kedua-dua pihak ini, saya fikir tugas berikut memainkan peranan penting.

▍Biar semua orang melihat titik kesakitan

Seperti yang dinyatakan sebelum ini: Dengan lelaran perniagaan, rangka kerja utama enjin pengiklanan kami telah menjadi kabur, dan berpuluh-puluh strategi pengiklanan bertaburan dalam senario perniagaan yang berbeza dengan konfigurasi yang tidak kemas.

Sebagai tindak balas kepada dua perkara yang menyakitkan ini, kami mula menyusun perniagaan sedia ada sebulan lebih awal, membaca kod lama dan menyemak dokumen keperluan sebelumnya. Akhirnya, kami mengklasifikasikan proses teras dan strategi pengiklanan senario berbeza kepada satu A bentuk yang jelas.

Jadual inilah yang membolehkan teknologi dan produk melihat dengan jelas keseluruhan gambar bahagian enjin kami untuk kali pertama, dan memahami kerumitan perniagaan dan kesesakan teknikal semasa.

▍Selepas menjelaskan matlamat dan nilai pemfaktoran semula

dan membuat semua orang merasakan titik kesakitan, kami merancang dua matlamat utama untuk pemfaktoran semula ini:

ion rangka kerja utama: memodulasi proses utama, mentakrifkan semula protokol lapisan atas dan bawah, dan memastikan antara muka yang jelas juga perlu disarikan secara dalaman dan mempunyai skalabiliti yang baik;

2 Strategi yang fleksibel dan boleh dikonfigurasikan: Strategi pengiklanan dikelaskan dan diabstrakkan mengikut niat perniagaan, syarat pelaksanaan strategi boleh dikonfigurasikan secara dinamik, dan strategi boleh dipasang masuk dan keluar sesuka hati.

Selain itu, kami telah memperhalusi manfaat yang diharapkan yang boleh dibawa selepas melengkapkan dua matlamat teras ini:

1 Faedah teknikal: Struktur kod lebih jelas, lebih mudah difahami dan diselenggarakan, dan kecekapan pembangunan enjin akan dipertingkatkan lagi.

2 Faedah perniagaan: Strategi boleh mencapai konfigurasi dan pengembangan yang lebih halus, dan lebih mesra kepada sokongan perniagaan yang dipertingkatkan kecekapan boleh mempercepatkan lelaran perniagaan.

Selepas menyegerakkan nilai pembinaan semula kepada semua orang, ia meningkatkan lagi keterujaan semua orang dan memberikan semua orang motivasi yang lebih kuat untuk mengambil bahagian.

▍Kawalan irama keseluruhan

Kawalan irama keseluruhan juga merupakan bahagian yang sangat penting, membolehkan semua orang mempunyai jangkaan masa untuk perkara ini.

Pertama sekali, kami menetapkan tempoh pembinaan kepada 1 bulan Di satu pihak, kami mempertimbangkan masa kitaran maksimum yang boleh diterima di bahagian perniagaan, dan kami juga mengharapkan penyelesaian yang cepat dari segi teknikal; Festival Musim Bunga semakin hampir, dan kita mesti tergesa-gesa sebelum syarikat ditutup Pergi dalam talian sebelum pergi ke dalam talian, dan tempah penimbal selama 1-2 minggu untuk mengelakkan situasi yang tidak dijangka.

Selain itu, kami telah mencapai persetujuan dengan pihak perniagaan: Semasa tempoh pembinaan semula, keperluan tidak mendesak untuk bahagian enjin tidak akan diterima Ini boleh meminimumkan pembangunan selari dan konflik kod dan membolehkan pasukan lebih fokus.

03 Apakah pengalaman yang boleh anda kongsikan semasa proses pelaksanaan?

Pemfaktoran semula ini dilaksanakan dengan begitu lancar Saya mempunyai 4 pengalaman berharga untuk dikongsi dengan anda.

1. Penyelesaian reka bentuk teknikal berkualiti tinggi

Ini disebabkan oleh kitaran yang memerlukan lebih daripada 3 hari pembangunan projek. Pembinaan semula ini pastinya tidak terkecuali.

Seni bina keseluruhan rangka kerja, reka bentuk protokol antara modul dan reka bentuk kebolehskalaan strategi adalah fokus penyelesaian teknikal ini.

Selepas rancangan besar dimuktamadkan, pasukan itu memperhalusi bahagian awam seperti pangkalan data, medan antara muka, struktur cache, titik terkubur log, dll. Kerana ia melibatkan pembangunan kolaboratif berbilang orang, pasukan bersetuju untuk menggunakan dokumen sebagai antara muka komunikasi dan dokumen sentiasa Kekal segerak dengan kod anda.

Di bawah keperluan yang begitu tinggi, pasukan menghasilkan dokumen penyelesaian teknikal lebih daripada 5,000 perkataan, berjumlah 36 muka surat, yang meletakkan asas yang baik untuk jaminan kualiti keseluruhan.

2. Pra-refactor kod rangka kerja

PR ini sangat kritikal dan merupakan langkah paling penting daripada pelaksanaan penyelesaian teknikal kami kepada kod tersebut. Kami telah menyusun struktur pakej yang dibina semula, pembahagian modul, definisi API antara setiap lapisan dan pengabstrakan strategi pengiklanan yang berbeza, mengabaikan butiran pelaksanaan terlebih dahulu.

Dengan cara ini, kod utama pada asasnya terbentuk, yang boleh menggambarkan dengan jelas rangka kerja ideal kami. Kami kemudiannya menganjurkan beberapa ulasan kod terpusat dan akhirnya membentuk pendapat bersatu.

Langkah ini boleh mengelak daripada terperangkap dalam butiran pelaksanaan terlalu awal, mengakibatkan perhatian yang tidak mencukupi pada rangka kerja utama dan kerja semula yang tidak stabil nanti sebenarnya akan menyeret ke bawah kecekapan.

3. Komunikasi yang kerap dan mekanisme semakan kod berpasangan

Selepas memasuki peringkat pelaksanaan terperinci, perkara yang sangat penting ialah: memahami logik sedia ada. Kod enjin telah diulang selama satu setengah tahun Ia telah dibangunkan oleh ramai orang dalam sejarah, tetapi kali ini hanya tiga pelajar yang mengambil bahagian dalam pembinaan semula.

Semasa keseluruhan proses, apabila kami menemui sebarang logik kod yang tidak jelas, kami berkomunikasi dan mengesahkan berulang kali, dan tidak membuat tekaan subjektif. Awas ini sebenarnya sangat penting.

Selain itu, untuk semakan kod, kami menugaskan pelajar yang biasa dengan perniagaan ini untuk bertanggungjawab untuk setiap modul Mereka dipasangkan secara berpasangan dan mekanismenya adalah fleksibel.

4. Pelan ujian yang berkesan

Refactoring belum dilakukan, testing dulu. Prinsip ini ditekankan dalam buku "Refactoring" dan juga menjadi tumpuan perbincangan kami mengenai penyelesaian teknikal ini, saya akan pilih di sini untuk mengembangkannya secara terperinci.

Pertama sekali, kami membuat perjanjian pada peringkat awal: untuk tidak menyentuh sebarang kod lama, dan membina pakej baharu sepenuhnya untuk pembinaan semula. Ini memudahkan untuk membandingkan keputusan sebelum dan selepas pembinaan semula dan menjalankan eksperimen skala kelabu dalam talian pada masa yang sama.

Mengenai pelan ujian, 4 perkara berikut patut dipelajari:

1. Pemfaktoran semula ini tidak melibatkan pelarasan fungsian API tidak akan Jika terdapat sebarang perubahan, kaedah ujian hujung ke hujung ini adalah yang paling berkesan Ini adalah kaedah R&D dan ujian QA yang paling penting.

2. Ujian asap: Pelajar QA menyediakan kes asap, dan pelajar R&D menjalankan ujian asap sebelum ujian R&D, semua kes asap mesti lulus. Ini tidak biasa di kebanyakan syarikat Internet, tetapi ia benar-benar berkesan untuk projek besar.

3 Pengesahan dwi-proses persekitaran kotak pasir: Seperti yang dinyatakan sebelum ini, kod sebelum dan selepas pembinaan semula kami dikekalkan, jadi parameter input persekitaran dalam talian boleh ditangkap melalui skrip sebagai kes, dan kemudian pengembalian API dikembalikan secara automatik Medan dibandingkan satu demi satu.

4 Percubaan skala kelabu persekitaran dalam talian: Skala kelabu sangat penting untuk pembinaan semula Kami menggunakan platform ABTest sedia ada untuk melepaskan trafik skala kelabu secara beransur-ansur, daripada 5%, kepada 10%, kepada 30%, dan akhirnya kepada 100%, a. kadar pengembangan volum yang sangat berhati-hati telah diwujudkan, dan kemudian disahkan melalui log dan pemantauan penunjuk perniagaan.

Ditulis pada penghujungnya


Menyemak keseluruhan proses pembinaan semula, diringkaskan dalam 7 perkara penting berikut:

1. Rebut peluang untuk menstruktur semula
2. Penyusunan awal adalah sangat penting, cari titik sakit terlebih dahulu
3 tidak sesuai untuk operasi jangka panjang, ia tidak sesuai Selari dengan perniagaan
5 Penyelesaian teknikal berkualiti tinggi diperlukan
6 berhati-hati dan bertanggungjawab untuk setiap baris kod
Sudah tentu, perkara yang paling penting Faktor yang paling penting ialah orang yang memfaktorkan semula projek berskala besar sangat menguji keupayaan kerjasama pasukan Jika semua orang boleh dipercayai, pemfaktoran semula akan menjadi separuh berjaya .

Atas ialah kandungan terperinci Perkara tegar: perjalanan pembinaan semula lebih daripada 30,000 baris kod dalam sistem teras. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Java学习指南
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan