Ali Xuandi: Belirsizlikle yüzleşen yazılım tasarımı üzerine bazı düşünceler

Alimei's Guide: Karmaşık iş geliştirmede değişim tek sabit hale geldi. Etkili inovasyon desteği sağlarken altyapının güvenliği ve yüksek kullanılabilirliği nasıl sağlanır? Bugün, Alibaba'nın başkan yardımcısı ve iş platformu bölüm başkanı, Alibaba'nın iş platformu yapımı ve büyük ölçekli yazılım tasarımında kişisel yıllara dayanan deneyimiyle birleşti ve herkesin yazılım mimarisi tasarımına ilham vermeyi umarak birkaç düşünceye göre rafine edildi.

Xuan Nan, Ali Başkan Yardımcısı, İş Platformu Bölümü Başkanı

Özel not: Bu makalede adı geçen yazılım, son kullanıcı odaklı iş odaklı yazılımla ilgilidir ve işletim sistemi, ara yazılım ve diğer sistem yazılımlarını içermez.

1. Yazılım geliştirmenin çeşitli aşamaları

  • Yazılım araçları ve bilişim aşaması: Yazılım ilk olarak sayısal hesaplama araçları şeklinde ortaya çıktı. PC çağında çok aşina olduğumuz Excel ve Word dahil. Ve kurumsal süreç onayı, satın alma, satış ve envanter yönetimi sistemi gibi tipik kurumsal iç yönetim bilgi sistemleri.
  • İnternet hizmet aşaması: PC İnternet'in yükselişiyle, Taobao, QQ, Google ve Sina gibi yeni İnternet hizmetleri yavaş yavaş günlük hayatımıza girdi.
  • Sosyal altyapı aşaması: Mobil internetin, IoT'nin ve yapay zekanın ortaya çıkması ve hızla gelişmesi ile çeşitli yazılımlar sosyal ve ekonomik yaşamın tüm yönlerine girer ve yazılımlar birbirine bağlanarak karmaşık bir ekosistem oluşturur, Vazgeçilmez sosyal altyapı.

Yazılım biçimindeki değişikliklerle, geçmişte yüksek verimli sistem mimarisi ve organizasyon biçimi kapsamlı zorluklarla karşılaştı. Çünkü içinde yaşadığımız ortam nicelikselden nitel hale geldi, kritik noktayı aştı ve temel bir fark yarattı.

Alibaba bu süreçte tipik bir temsilcidir. Geçmişte tek bir e-ticaret işinden karmaşık bir ekonomiye dönüşmüştür. Kesin iş sınırları olmadan, gelişen iş tahmin edilemez. Tipik özellikler şunlardır:

  • Geçmişte bir Taobao'dan onlarca iş birimi ve şirkete dönüştü ve yeni perakende, bulut bilişim, eğlence ve sağlık gibi yüzlerce işletme hala hızla gelişiyor;
  • Geçmişte bir Denali sisteminden, dağıtılmış bir mimari aracılığıyla on binlerce sistemden oluşan bir topluluğa dönüşmüştür.Birçok sistemde çeşitli iş mantıkları iç içe geçmiş durumdadır ve bu belirsizdir;
  • Düzinelerce insanın işbirliğinden on binlerce insanın işbirliğine kadar, herkes ilkel bir tropikal yağmur ormanı gibidir, işin tam resmini bilmeden, fillere dokunan kör insanlar;
  • Önceki kapatma sürümünden kesintisiz, sürekli gelişen bir sosyal altyapıya kadar, yalnızca sistem kararlılığı değil, aynı zamanda iş sürekliliği de gereklidir. İş tarafına verimli ve engelsiz inovasyon desteği sağlarken, bu altyapının güvenliğini ve yüksek kullanılabilirliğini nasıl sağlayacağımız çözmemiz gereken temel sorundur.
  • Bu sorunlara yanıt olarak, yazılım tasarımı hakkında bazı temel düşüncelerimiz var.

    2. Geleneksel yazılım tasarımı: genişlemenin kesinliği

    Programcılar olarak hepimiz, yazılımın beklentileri karşılaması için kesinliğe ihtiyacımız olduğunu biliyoruz. Belirsizlik, program tasarımı için ölümcüldür. Bu nedenle, sık sık "talebin yeniden değiştiğine" dair şikayetler duyarız. İnternetteki birçok hikaye, programcıların değişen talepleri sürdürmek için iş partilerine ve ürün yöneticilerine karşı haçlı seferleridir.

    "Araçlar ve bilgilendirme" çağında, yazılım esas olarak orijinal manuel çalışmayı simüle etmek ve elektronikleştirmek için bilgisayar yazılımını kullanır, bu nedenle tipik bir özelliği vardır: iş alanları, yazılım sorumlulukları ve işlevsel sınırlar nispeten açıktır. Bu nedenle, en klasik yazılım mühendisliği teorisi şelale modelidir: gereksinimleri toplama, UserCase'i çizme, işlev setlerini belirleme, model soyutlama, taslak tasarımı, ayrıntılı tasarım, kodlama, birim testi, entegrasyon testi, kullanıcı testi ve çevrimiçi işlem. Sonra bir sonraki yinelemeye koyun. Çoğu geleneksel yazılım geliştirme bu modeli kullanır. Bu model özellikle belge kalitesinin tutarlılığını ve tüm değişim sürecini vurgular.

    İnternet hizmetleri çağında, bilgisayar yazılımları insan etiyle başarılamayacak yeteneklere kavuşmuş ve insan toplumuna birçok yeni hizmet yeteneği sağlamıştır. Geleneksel yazılım mühendisliği teorisini miras aldık ve makul iyileştirmeler yaptık. Sürüm yineleme süresini kısaltmak ve kullanıcıları daha hızlı edinmek için ürün fikirlerini doğrulamak için çoğu ekip Agile modelleri benimser. Esasen talep toptan satış modelini perakende modeline dönüştürür. Bu modelin en büyük avantajı, ürün gereksinimlerine hızlı yanıt vermesidir, ancak ölümcül olan şey, her bir çevik durumda çoğu durumda yamaların sürekli olarak uygulanması ve yazılım mimarisinin hızla bozulmuş olmasıdır. İki yıl içinde Agile aslında bir salyangoz haline geldi. İki yıl sonra, dayanamıyorsanız, yeniden inşa edin. Ancak sözde yeniden yapılanma aslında bir devrilmedir. Bu modda neredeyse hiç belge yok.

    Yazılım tasarım teorisinin ilk iki aşamasında temel bir varsayım vardır: Yazılımın sınırı belirlenir ve tümevarım ve ölçülü tahmin yoluyla (aşırı tasarımı önlemek için) model soyutlama yaparız. Model soyutlama yoluyla, gereksinimlere hızlı bir şekilde erişmek ve verimliliği artırmak için çeşitli yapılandırılabilirlikler tasarladık, buna genellikle ürünleştirme diyoruz. Arayüz tasarımı ve modüler tasarım yoluyla iş bölümünü ve işbirliğini organize edin. Sistem mimarisinin açıklığıyla yapılandırılamayan değişikliklere yanıt verme. Değişiklikler genellikle iki yönden gelir:

    Birincisi, genellikle dağıtılmış veritabanları, dağıtılmış önbellekler, dağıtılmış hizmetler, birden çok bilgisayar odası ve birden çok birim, CDN vb. İle çözülen kullanıcı sayısındaki artış. Bu konuda Alibaba çok iyi durumda olmalı. Wucai Shi'nin başlangıcından beri, Alibaba'nın mimarisi temelde bu rehber ideolojinin uygulanması ve optimizasyonu olmuştur ve yine de kullanıcıların hızlı büyümesiyle başa çıkmanın iyi bir yoludur.

    İş fonksiyonunun ikinci yönü değişir, genellikle sistem ölçeklenebilirliği diyoruz. Geleneksel veritabanları veya NoSQL'in geniş alanları aracılığıyla, "meta veri + KV depolama" yöntemi, veri bilgilerinin belirsizliğiyle başa çıkmak için kullanılır; işlem motoru, iş sürecinin hızlı yanıtını karşılamak için kullanılır; kural motoru, programdaki çok sayıda If-'nin yerini almak için kullanılır. Aksi takdirde, kuralların değişikliğini gerçekleştirmek için arayüz yapılandırmasını gerçekleştirin. Kullanıcı arabirimindeki değişiklikleri hızlı bir şekilde ayarlamak için UI düzenleyiciyle UI bileşenleştirme yoluyla. Değiştirmesi kolay ve nispeten karmaşık mantık, eklenti teknolojisiyle genişletme için ana akıştan çıkarılır. Bakalım mükemmel yazılımın güncel karşılaştırma paketleri aşağı yukarı aynı.

    Şimdiye kadar, yazılım geliştirmemiz bir çembere benzer belirleyici bir probleme yöneliktir.İhtiyaç sınırı vardır.Çevreden toplanıp soyutlama yaparız, yani iş soyutlamamız veya modellememizdir; o biziz Ev, dört köşe taşıyıcı duvarla sınırlanmıştır. İçerideki dekorasyon, sahibinin hobilerine ve aşamalı taleplerine göre yeniden inşa edilebilir, ancak dışa doğru genişletilemez; çerçeve yapısı, iş alanı modeli soyutlaması ve bileşenlerle karakterize edilir. Dönüşüm, versiyonlama, içe doğru genişleme;

    3. Düşünme açısının değişmesi: çekirdeğin kesinliği

    Mobil internet, IOT ve yapay zekanın gelişmesiyle birlikte yazılım toplumun altyapısı haline geldi.Her birimiz yazılım tarafından sıkı bir şekilde kontrol ediliyor ve bir gün cep telefonlarına ve bilgisayarlara sıkışıp kalıyoruz. İnsanlar aslında yazılım ağlarına terminal olarak erişirler. Toplumsal oluşumun sınırları yoktur, sürekli değişmektedir ve öngörülemez. Ali'nin şu anki işinin de deterministik sınırları yok, yarın ne hale geleceğini bilmiyorum, versiyonu değil, sürekli büyüyor ve değişiyor. Belirleyici bir yazılım uzantısı yoktur. Eğer deterministik bir uzantı yoksa ve yazılımın işleyişi determinizmi gerektiriyorsa, sadece deterministik bir çekirdek bulabiliriz.

    Bu değişikliği nasıl anlayabilirim? Makine öğreniminin gelişiminden bir benzetme yapabiliriz. Geleneksel makine öğreniminin doğrusal regresyon, karar ağacı, rastgele orman algoritması, lojistik regresyon, SVM, naif Bayes, K en yakın komşu algoritması, K ortalama algoritması ve benzeri gibi birçok algoritma modeli vardır. Çözmek istiyorsak, eşleşen algoritma modelini seçip iyi sonuçlar elde etmeden önce öncelikle problem alanını analiz etmeye çalışmalıyız. Doğrusal olmayan bir problemse, ancak doğrusal model yanlış seçilmişse, sonuç alınmayacaktır. Bu tür bir problem çözme fikri, içerideki parametreleri aramadan önce deterministik bir problem sınırı bulmaktır. Bununla birlikte, derin öğrenmenin çözümünde önemli bir değişiklik vardır.Sorun alanı tanımlanmamıştır, ancak kararlı bir yapı tanımlanmıştır.BP sinir ağının bir giriş katmanı, çok sayıda gizli katmanı ve bir çıkış katmanı vardır. Görüntü verilerini girersek, görüntü sınıflandırma ve yüz tanıma yeteneklerini geliştireceğiz ve ses girişi yaparsak konuşma tanıma yeteneklerini geliştireceğiz (elbette bu o kadar basit değil). Derin öğrenme, kendi kendine öğrenme ve içten dışa büyümedir.

    Yazılım mühendisliği de aynı sorunla karşılaşır ve dış uç kesinliğinden çekirdek kesinliğine geçmesi gerekir. Mantıksal akıl yürütme perspektifinden bakıldığında, geleneksel yazılım mühendisliği, kısmen tümdengelimli yöntemler kullanılarak tümevarım yöntemlerine dayanır, genişleme belirsizliği alanıyla karşı karşıya kalırken, kararlı bir temel temel bulmak ve ardından ana olarak tümdengelimli yöntemleri kullanmak gerekir. Kısmen indüksiyon kullan. Önce iç çekirdeği ararız, iç çekirdek dışa doğru büyür ve mutasyona uğrar. Asıl kesinlik dış kenarın kesinliğini bulmaktır Şimdi iç çekirdeğin kesinliğini aramamız gerekiyor. Tümevarım olduğu ortaya çıktı, ama şimdi, tıpkı insanların genler tarafından kontrol edilmesi gibi, neyin sabit olduğunu çıkarsamamız ve bulmamız gerekiyor. Elbette, bunun iş alanlarında daha üst düzey bir soyutlama olduğunu da söyleyebilirsiniz.

    4. Belgeler koddur

    Bilgisayar geliştirme tarihi boyunca, yazılım geliştirme verimliliğinin iyileştirilmesi, gerçek dünya ile bilgisayar ikili dünyası arasındaki boşluğu kapatmaktır. İkili kodlamadan derlemeye, C diline, nesne yönelimli C ++, JAVA'ya. Her yükseltme, gerçek dünyanın, insanların anlaması daha kolay bir şekilde soyut bir tanımıdır ve daha sonra, bilgisayar doğrudan ikili çalıştırabilene kadar bir derleyici aracılığıyla fark gözetmeden düşük seviyeye çevrilir. Her yükseltme, yazılım geliştirmenin verimliliğinde katlanarak bir iyileşme sağlar ve aynı zamanda yazılım tasarımına katılabilecek kişi sayısının katlanarak artmasına izin vererek tüm topluma büyük ilerleme sağlar. Bunun en büyük kahramanı şüphesiz derleyici. Bizim temel varlığımız, derlemeden sonra çalıştırılabilen ikili kod değil, derlemeden önceki kaynak koddur. Derlenen kodumuzun anlaşılması kolay olmadığından, kaynak kodunu tersine mühendislik yoluyla geri yüklemek imkansızdır. Kaynak kodunu kaybederseniz, temelde her şeyi kaybedersiniz.

    Mevcut iş alanına geri dönersek, hepimiz iş yaptığımızı iddia ediyoruz.Örneğin, iş platformu Taobao, Tmall, açık artırma, Hema Fresh Food, Tmall Süpermarket, Flying Pig bileti, tren bileti vb. iş. Ancak bu temel iş kavramları, kodumuzda hiçbir şekilde bulunamaz. Hepimiz e-ticaret garanti işlemlerinin, ön satışların, grup alımlarının, teslimatta ödeme vb. Temel işlem modelinin kodda bulunamayacağını biliyoruz. Ayrıca bunları açıklayacak doğru belgelerimiz de yok. Bu, geleneksel yazılım mühendisliği yöntemlerinden ve teknik sınırlamalardan kaynaklanmaktadır.

    İhtiyaç analizi, taslak tasarımı ve nihai Java koduna kadar ayrıntılı tasarım, aslında iş mantığından bilgisayar dünyasına bir derleme sürecidir. Buradaki en büyük sorun insan eti derlemesidir, makinede gelişigüzel derleme değil, bu derleme süreci kişiden kişiye değişiklik göstermektedir. Bu belirsizlik nedeniyle, tüm tasarım belgeleri ile gerçek çalışan kod arasında zaman içinde aşılamaz bir boşluk olacaktır. Bir iş sisteminin dokümantasyonu gittikçe daha yararsız hale geliyor ve kimse bunu yazmıyor. Belgeleri kod olarak uygulayamazsak, gerçek kullanılabilir belgeler bırakamayız.

    Tasarım ve uygulamayı entegre etmemiz gerekiyor. Doğal dünyaya baktığımızda, tüm tasarım belgeleri ve çizimler aslında DNA'dır ve DNA, canlı bir bedenin her hücresinde mevcuttur. DNA'nın kalıtımı, yaşamın mirasıdır. Dışsallaştırılmış tüm belgeler sonunda kaybolma eğilimindedir. Tıpkı Qin Shihuang'ın yıllarca insanlığın yağışlarını ve mirasını bir yangınla yok etmesi gibi. Ancak DNA'daki biyolojinin içgüdüsel kalıtımı nesilden nesile aktarıldı ve optimize edildi.

    Hedef: Yürütülebilir sistemden bağımsız belge yok. Tüm bilgiler sistemde yer alır, ancak okunabilirliği artırmak için bazı araçlarla görselleştirilir. Tüm bilgiler bir boşlukta var olamaz ve bir iş nesnesine ait olmalıdır.

    5. İş odaklı nesne tasarımına kadar işlev odaklı bileşen tasarımı

    Dünyamız, entropi değişiminin yönüne göre entropi arttıran inorganik bedenlere ve entropi azaltan canlı bedenlere bölünebilir.

    İnorganik gövdeler, tasarım ve çizimlerle tasarımın yukarıdan aşağıya ayrıştırılması ve rafine edilmesi ile yapılır ve daha sonra bileşenler halinde birleştirilir. Tipik özellikler: İşbirliği ve verimlilik için standart bileşen tasarımı ve seri üretim.

    Canlı bedenler içten dışa doğru büyür ve mutasyona uğrar. Modüler görünmesine rağmen, farklı genler nedeniyle aslında farklı organizmalar yeri doldurulamaz ve reddedilme reaksiyonları üretecektir. Tüm bileşenler, genlerin kontrolü altında eşzamanlı olarak büyür. Yaşam formlarının büyümesi ve mutasyonu süreklidir.

    Bileşenleştirme ile inşa edilen tüm inorganik cisimler niteliksel değişikliklere uğrayacaksa, devrilecek ve yeniden inşa edilecektir. Tıpkı şehrimizin sürekli yıkım içinde sürekli genişlemesi gibi. Bir diğer örnek ise 7 nolu binamız ... Tasarım sonunda sadece 6. kat olabileceğine karar verilmiş, belki 8. kat fazlalıkla yapılabilir ama 20. kata çıkarılırsa kesinlikle çökecektir. 20 kat inşa etmek istiyorsanız, sadece onu devirebilir ve yeniden başlayabilirsiniz.

    Bu nedenle, soyutlamaya göre, bileşenli yazılım sistemi, işin gelişmesiyle birlikte, gittikçe daha fazla yama, birkaç yıllık faaliyetten sonra altüst olacağı kaderidir.

    Bireysel organizmaların karmaşıklığı da sınırlıdır ve büyük bir ölçek ve güç oluşturmak için grup işbirliğine dayanmaktadır. Grubun evrimi, bireyin mutasyonuna ve doğal seleksiyonuna dayanır, tıpkı bir babanın oğlunun büyümesini ve geleceğini tahmin edememesi gibi, yaşamın evrimi de tahmin edilemez.

    Artık iş sistemlerimiz alışveriş sepetleri, mağazalar, ayrıntılar, envanter, işlemler, pazarlama, fonlar, ödeme, ödeme ve finansal sistemler gibi bileşen sistemlerinden oluşuyor. Tüm iş gerçekleştirme, aslında bu bileşen sistemlerinde akan veri ile gerçekleştirilir. Bu işletim sisteminde Tmall, Taobao, Hema, Tmall Süpermarket, teminatlı işlemler, ön satışlar, grup alımları, duyduğumuz ve gördüğümüz bu şeyleri göremiyoruz. Hepsi dağınık veri alanlarına ve IfElse'ye yansıtılır.

    Tasarım fikrimiz, işin özüne geri dönmek ve işletmenin büyümesine, devralmasına ve değişmesine izin vermek için nesne tasarımını kullanmaktır. En temel fikir: tüm sistemin temeli iştir. Taobao ve Tmall adında gerçek bir Sınıf göreceksiniz, Market adında bir babaları var Tmall Süpermarket bağımsız bir Sınıf, Tmall'ın oğlu. Babalarının genlerini miras almış ve bağımsız marka zihnine sahip tüm işletmeler, operasyon süresince gerçekten var olacaktır. Kardeşler arasındaki etkileşimi nesneler aracılığıyla ortadan kaldırın. Çekirdek kontrol geni değişmezdir, ancak yeni yeteneklerin yaratılması, babanın etkisi olmadan bağımsız olarak gelişebilir ve ayrıca yeni alt işletmeler yaratabilir.

    Aynı zamanda, bir dizi iş nesnesi işbirliği mekanizması kurmamız da gerekiyor.Tmall ve Taobao birbirleriyle işbirliği yapıyor ve Damai ve Fliggy iş ile iş arasında bir bağlantı oluşturmak ve birlikte dinamik bir çoğalan ekosistem oluşturmak için işbirliği yapabiliyor. Tüm Alibaba iş sistemini görselleştirebilirsek, Taobao ve Tmall'a giren alıcılar ve satıcılar bir oyuna girmek gibi olacaklar ve bir Tmall süpermarketine girmek bir süpermarkete girmek gibi ve müzayedeler gerçekten de çekiç gibi. Sanal dünyanın gerçek hissi.

    Alibaba'nın iş platformunun evrimi: işlev merkezli ticari kapasite merkezli iş merkezli, yoldayız.

    Manchester United üçlü taç efsanesi böbrek sorunları nedeniyle neredeyse intihar etti! Fjue arama yöntemi şu anda Manchester United için çalışmıyor
    önceki
    Sun: Shi öldürülebilir ama hakaret edilemez! Yeşil: Sana ne hakaret ediyor! Neden çöplere koçluk yapıyorum?
    Sonraki
    Arabayı teslim alırken, 4S mağazası zorla yüksek bir "depo ücreti" talep ediyor! Böyle bir derebey hükmü hakkında ne düşünüyorsunuz?
    Xiaomi K-Song Kulaklıklar tüm ünlüler tarafından beğenildi. 23 Ocak'ta canlı görüşmek üzere. Geliyor musun?
    camdan Kalp? Ünlü yorumcu, oyuncuyu "siyah ve sert" olarak değerlendirdi ve ırk ayrımcılığı yapmakla suçlandı!
    Süper Lig yarısının en iyi koçu! Yıllık maaşı Lippi'nin yalnızca 1/115'i, yani Luneng çifte tacı kazanabilir
    Zhang Lu'nun "Xinyu Wuhen" ciltli baskısı satışta! Telafi etmek için "iletişim" kursundan bahsedin
    Düşük fiyata iyi bir araba yok mu? 100.000 civarında bu iki SUV güçleriyle yüzlerini tokatlıyor!
    Pazartesi sabahı haberleri | Ali IPv6'yı tamamen kabul etti; Java organizasyonunda koltuk olarak yeniden seçildi
    Yıllarca sürdükten sonra, direksiyonda böyle hayat kurtaran bir şey olduğunu bilmiyorum! Dikkatli düşün
    Süper Lig, en büyük savaşı yeniden karşılıyor! Guoan Luneng PK doğrudan, Evergrande SIPG bu sonucu umuyor
    Mourinho, Manchester United forvet stand-in olarak 6 forvet seçebilir: Fu Jue'nin sihirli yedek oyuncusu + Manchester United genç süpernovası
    "Kıtlık" tarifi önerilen hayatta kalma becerileri ve dört mevsim BOSS oynanışı
    Popovich şaşkına döndü: Seni övüyorum, ciddi misin? Mitchell: Çin Yeni Yılı'nda da köfte yeriz!
    To Top