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.
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.
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.
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.
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?
▍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.
▍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.
03 Apakah pengalaman yang boleh anda kongsikan semasa proses pelaksanaan?
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.
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:
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!