Qiniuyun CEO'su Xu Shiwei: Mimari tasarıma makro bir bakış açısı

Yazar | Xu Shiwei

İçerik "Xu Shiwei'nin Mimari Sınıfı" ndan seçilmiştir

Günümüzün son derece gelişmiş bilgi teknolojisinde, her birimiz cep telefonları (iPhone, oppo kameralı telefonlar gibi), tabletler (iPad gibi), saatler (iWatch, Xiaotiancai gibi) dahil olmak üzere her zaman ve her yerde programlar tarafından yönlendirilen akıllı elektronik cihazlara erişebiliriz. Akıllı saatler), hoparlörler (Tmall Genie gibi), arabalar (Tesla gibi) vb.

Bunlar nasıl çalışır? Yazılım sistemi söz konusu olduğunda, bu küçük cihazlarda çalışan binlerce yazılım modülü vardır.Bu modüller birlikte nasıl bu kadar hassas bir şekilde çalışıyorlar?

Bu bağlamda, geçmişte birçok yazılım geliştirme mühendisi veya mimarı ile temas halindeydim. Birçok insan da bu ilkeleri biraz anlıyor. "Bilmelerine" rağmen "nedenini bilmiyorlar." Hatta bazı arkadaşlar bunları öğrenmenin faydalı olduğunu bile düşünebilir, bence içeriğin bu kısmı bizim mimar olabilmemiz için kesinlikle çok önemli bir temel ders.

Neden bir makro perspektif oluşturmamız gerekiyor?

Bir ev inşa edecek inşaat işçileri (tuğlaları taşımaktan sorumlu) ve mimarlar (mimari tasarımdan sorumlu) olduğu gibi, yazılım sistemlerinin geliştirme süreci de programcıları ("tuğlaları" taşımaktan sorumlu) ve mimarları (mimari tasarımdan sorumlu) gerektirir. Mimarlar olarak ihtiyacımız olan ilk yetenek, genel durumu kontrol edebilme becerisidir.

Bir uygulama bir binayla karşılaştırılırsa, o zaman binanın mimarları olarak, programcıların tuğlaları doldurabilmesi için binanın yapısını inşa etmemiz gerekir.Bir binanın yapısının temel ile sağlam ve sıkı bir şekilde inşa edilip edilmediğini hepimiz biliriz. Bölünmez.

Bu nedenle, öncelikle binanın temelinden yapıya aşina olmamız gerekiyor. Sonuçta, güvendiğiniz altyapı hakkında ne kadar kapsamlı bilgi sahibi olursanız, iş mimarisi tasarımında o kadar rahat olursunuz.

Altyapının bilgi noktalarını tanıtmak, onları gerçekten uygulamanızı sağlamaz. Ancak yine de onların temel fikirlerinin ne olduğunu anlamanız ve onları daha iyi kontrol etmek için hangi bilgileri derinlemesine anlamanız gerektiğini bilmeniz gerekir.

Tüm sütun içeriğimiz de Temel mimariden konuşmak ve nihayet aşamalı olarak iş mimarisine geçiş, eksiksiz bir uygulama tasarım sürecinin nihai tamamlanmasına.

Bu nedenle, bugünkü açılışın ilk makalesinde, altyapıdan başlayarak makro bir perspektif almamız ve bir uygulamanın genel kompozisyonunu aşamalı olarak incelememiz gerekiyor. Umarım bugünün makalesi aracılığıyla, bir başvurunun tam bir resmini oluşturabilirsiniz. Tam anlayış.

Baştan başlıyoruz.

Önerilen sütun "Xu Shiwei's Architecture Class", makalenin sonundaki tıklayın "daha fazlasını anla" Deneyin veya abone olun

Uygulama altyapısı

Aslında, bilgisayarın nasıl çalıştığını ve programın nasıl çalıştığını anlamak için bir programın temel yapısını öğrenmek istiyoruz.

Ne tür akıllı elektronik cihazlar, cep telefonları veya arabalar olursa olsun, hepsi "bilgisayar" olarak adlandırılabilir. Tüm bilgisayarlar şu şekilde kabul edilebilir: "Merkezi işlem birimi + depolama + bir dizi giriş ve çıkış cihazı" oluşturmak.

Genellikle CPU olarak adlandırdığımız merkezi işlem birimi, komutları talimatlara göre yürütmekten sorumludur; depolama, yürütmek istediğimiz komutlar dahil olmak üzere verileri kaydetmekten sorumludur ve ayrıca veri biçiminde depoda saklanır.

Bilgisayarı açtıktan sonra her seferinde, merkezi işlem birimi verileri (yani talimatları) depodaki sabit bir konumdan okumaya başlayacak ve komutları talimatlara göre yürütecektir.Bir talimatı yerine getirdikten sonra, sonraki talimatı yürütmeye devam edecektir. Bilgisayar çalışmaya başladı.

Bu kadar basit diyebilirsiniz. Evet, bu kadar basit!

Çok basit, Bilgisayarlar neden bu kadar karmaşık ve çeşitli görevleri yerine getirebiliyor?

Kanımca tüm bu süreç esas olarak iki noktaya bağlı.

Birincisi programlanabilirliktir. Genel olarak konuşursak, merkezi işlem biriminin (CPU) talimatları aşağıdaki kategorilere ayrılır.

  • Toplama, çıkarma, çarpma ve bölme, sin / cos vb. Gibi hepimizin iyi bildiği her türlü matematiksel işlemi destekleyen hesaplamalar.
  • G / Ç tipi, (depolamadan veri okuma ve yazma) giriş ve çıkış cihazlarından veri okuma ve yazma.
  • Komut atlama sınıfı, belirli koşullar altında yeni mevcut program yürütme konumuna atlar.

CPU komutu çok sınırlı bir komut seti olmasına rağmen, CPU tarafından yürütülen komut dizisi (veya "program") sabit değildir, ancak yazılım mühendisleri (veya "programcılar") tarafından depolanan verilere bağlıdır. ) Karar vermek için yazılan yazılım. Talimat dizisinin olasılıkları sonsuzdur, bu da bilgisayarın yapabileceklerinin olasılıklarının da sonsuz olduğu anlamına gelir.

İkincisi, açık tasarımın harici cihaz desteğidir. Bilgisayarımız klavyeler, yazıcılar, ekranlar, araba motorları gibi birçok harici cihaza bağlanabilse de, CPU bu cihazların özel yeteneklerini anlamaz, sadece bu cihazlarla veri alışverişi yapar. Yapabileceği şey, belirli bir numaralandırılmış aygıttan (genellikle bu aygıt numarasına "bağlantı noktası" denir) bir veri parçasını okumak veya aygıtın bağlantı noktasına bir veri parçası yazmaktır.

Örneğin, klavyede A tuşuna bastığınızda, CPU klavyenin bağlı olduğu bağlantı noktasından bir veri parçasını okuyabilir ve bu veri parçasını "A" tuşuna bastığınızı ifade etmek için kullanabilir.Belki CPU, yazıcıya bağlı bağlantı noktasına bir parça veri gönderecektir. , Yazıcıyı belirli bir metni yazdırmaya yönlendirmek için; CPU'nun, arabanın beklendiği gibi hareket edebilmesi için motoru döndürmek üzere araba motorunun bulunduğu porta veri göndermesi de mümkündür.

CPU'nun bu cihazlarla nasıl veri alışverişi yapacağını bildiğini, ancak verilerin anlamını anlamadığını belirtmek gerekir. Bu harici cihazların üreticileri cihaz donanımını sağladığında, genellikle CPU ile işbirliğini tamamlamak için donanıma uygun yazılım sağlamaları gerekir, böylece yazılım mühendisleri bu cihazları kolayca kullanabilir.

Yukarıdan da görülebileceği gibi, Bilgisayarın CPU'su çok kısa bir modeldir, verileri okur, yazar ve veriler üzerinde hesaplamalar yapar. . Bu nedenle, bilgisayarlara genellikle "bilgisayarlar" diyoruz çünkü CPU'ların beyinleri gerçekten yalnızca "hesaplamalar" yapar.

Birçoğumuz von Neumann bilgisayar sistemi olan bu temel tasarım sistemini biliyoruz. Haziran 1945'te von Neumann, "von Neumann mimarisini" tanımlayan "EDVAC Üzerine Taslak Rapor" başlıklı 101 sayfalık bir özet rapor hazırladı. Kendisi şu anda bilgisayar olarak da biliniyor. baba. Burada görmek istiyorum, büyüklüğünü anlamakta zorlanmamalısın, değil mi?

Bu temel bilgisayar sistemi ile yazılım yazabiliriz.

Elbette karşılaştığımız ilk sorun Yazılımı doğrudan makine talimatlarıyla yazmak çok yorucudur ve bu makine talimatları, kimsenin anlayamayacağı cennet gibi bir kitap gibidir. , Bakım yapılamaz.

ve bu yüzden, Programlama dili + derleyici Ortaya çıktı. Derleyici, biz insanların anlaması kolay olan dili, makinenin anlayabileceği makine talimatlarına dönüştürmekten sorumludur, bu da yazılım yazma eşiğini büyük ölçüde serbest bırakır.

Yazılım yazmak sorun olmadığında, Karşılaştığımız ikinci sorun, birden fazla yazılımın aynı bilgisayarda bir arada var olmasıydı. Birden çok yazılımdan aynı depolama adresine veri yazarken bir çelişki varsa ne yapmalıyım? Yazıcıya birlikte yazdırma talimatları gönderirsem ne yapmalıyım? Bazı yazılımlar onu gizlice yok ederse ne yapmalıyım?

sonra, işletim sistemi Ortaya çıktı.

o Çözülmesi gereken ilk şey, yazılım yönetişimi sorunudur . Bilgisayarınızın kötü amaçlı yazılımlardan korunmasını sağlamak için bir güvenlik koruma mekanizması oluşturmalıdır. Aynı zamanda, herkesin istenen şekilde işbirliği yapmasına izin vererek yazılımlar arasında işbirliği düzenini de oluşturmalıdır. Mesela buraya yazarsan ben başka yere yazacağım; yazıcıyı kullandığında sıraya girmen gerekiyor ve yazdırmayı bitirdikten sonra da yazdırmaya devam edebilirim.

İşletim sisteminin çözdüğü ikinci şey, temel programlama arayüzü problemidir . Bu programlama arayüzleri bir yandan yazılım geliştirmeyi basitleştirirken, diğer yandan yazılım yönetişimini gerçekleştirmek için çoklu yazılım bir arada varolma (çoklu görev) ortamı sağlar.

Örneğin, ekran aygıtları için, işletim sisteminin ekranın birden çok yazılım tarafından karıştırılmasını önlemek için çok görevli bir pencere sistemi sağlaması gerekir; klavye giriş aygıtları için işletim sistemi, klavye giriş olaylarının doğru yazılıma doğru şekilde gönderilmesini sağlamak için bir odak penceresi sunar. programı.

Bugün yazılım geliştirdiğimizde, zaten bazı temel mimari tasarımlarda olduğumuzu göreceksiniz. Von Neumann bilgisayar sistemi gibi, işletim sistemleri ve programlama dilleri gibi, bunlar üzerinde bir uygulama geliştirdiğimiz altyapılardır.

Altyapı, işletmeyle hiçbir ilgisi olmayan bazı genel sorunları çözer. Ne tür bir uygulama yapıyor olursanız olun, bu sorunların çoğu zaman yüzleşilmesi gerekir. Üstelik altyapı genellikle bağımsız bir yazılım olarak var olduğundan temel yazılım olarak da adlandırılır.

Örneğin, tanıdık Linux, Nginx, MySQL, PHP vb. Yazılımların tümü, uygulama geliştirmenin zorluğunu büyük ölçüde azaltan temel yazılımlardır. Bugün bir hizmet olarak yazılımın genel eğilimi altında, birçok temel yazılım nihayet "bulut bilişim" olarak adlandırılan İnternet hizmetleri olarak sunulmaktadır.

Önerilen sütun "Xu Shiwei's Architecture Class", makalenin sonundaki tıklayın "daha fazlasını anla" Deneyin veya abone olun

Tam program mimarisi nedir?

Programın temelini bitirdikten sonra, programın tam yapısına bir göz atalım.

Daha güçlü altyapı desteği ile uygulama geliştirmede dikkat edilmesi gereken konular ne kadar yakınsak, geliştirme verimliliğimiz o kadar yüksek olur. Yalnızca uygulamanın kendisinin iş problemini nasıl inşa edeceğimize odaklanmamız gerektiğinde, uygulamanın iş mimarisini (veya "uygulama mimarisini") tasarladığımızı söylüyoruz.

İş mimarisi, farklı uygulama alanlarına bağlı olarak büyük ölçüde değişiklik gösterse de, farklı iş mimarileri arasında hala birçok ortak nokta vardır. Sadece aynı mimari ilkeleri takip etmekle kalmaz, aynı tasarım paradigmasını da takip edebilirler.

Bazı tasarım paradigmaları, insanlar tarafından uygulama çerçeveleri biçiminde pekiştirilir. Örneğin, kullanıcı etkileşimi alanında iyi bilinen MVC çerçeveleri (JavaScript'te Angular, PHP'de Zend ve Python'da Django gibi) ve oyun geliştirme alanında çeşitli oyun motorları (JavaScript'te Phaser, C #'da Unity3D gibi) vardır. ,ve daha fazlası.

Bir sunucu tarafı uygulaması için, tam mimarisi kabaca aşağıdaki gibidir:

İstemci uygulaması için sunucu ile çok büyük bir fark olacaktır. Müşterinin karşılaştığı ilk şey, çeşitliliğin zorluğudur.

Yalnızca işletim sistemi açısından, Windows, Mac ve Linux gibi düzinelerce PC vardır ve cep telefonlarında da Android, iOS, Windows Mobile vb. Bulunmaktadır. Yalnızca dizüstü bilgisayarlar, tabletler değil, cep telefonları, saatler ve arabalar da dahil olmak üzere daha fazla ekipman türü var.Gelecek sadece daha çeşitli hale gelecektir.

İstemcilerin çeşitliliğini ortadan kaldırmak ve platformlar arasında birleşik bir programlama arayüzü sağlamak isteyen ilk şey tarayıcıdır.

Pek çok kişinin gözünde, tarayıcıdaki ana değişiklik, yazılımın dağıtılma şeklidir, böylece yazılım, kurulum gerekmeden hemen kullanılabilir. Ancak teknik bir bakış açısından, temelde yatan işletim sisteminin yazılım desteği de kutudan çıkarıldıktan sonra kullanılabilir.

Apple bunu zaten iOS'ta denedi. Bir yazılım parçasını uzun süredir kullanmadıysanız, iPhone'un onu yerel olarak temizleyeceğini ve bir sonraki kullanımınızda otomatik olarak yükleyeceğini fark etmiş olabilirsiniz. Paket yeterince küçükse, bu davranış Web uygulamalarından farklı değildir. Tek fark, Web uygulamalarının dayandığı talimatların makine kodu değil, daha yüksek seviyeli JavaScript komut dosyaları olmasıdır.

JavaScript, üst düzey talimatları nedeniyle makine koduna göre avantajlıdır. Ancak diğer yandan JavaScript bir metin talimatıdır ve ifade verimliliği makine kodundan daha düşüktür. Ama bu da değişiyor. Son yıllarda, WebAssembly teknolojisi gelişmeye başladı. Tarayıcının makine kodu olarak JavaScript'in durumu kademeli olarak değişecek ve ön uç geliştirmemiz daha fazla olasılıkla karşılaşacak.

Tarayıcının durumu çok özel, onu işletim sistemi üzerinde bir işletim sistemi olarak değerlendirebiliriz. Belli bir tarayıcı türü popüler hale geldiğinde, geliştiriciler tarayıcıda uygulamalar yapacaklar ve bu da kaçınılmaz olarak işletim sistemi üreticilerini görmek istemeyen temel işletim sisteminin ardışık düzenine yol açacaktır.

Ve tarayıcı kullanıcılarının sayısı görece azsa, bu sayede ulaşılabilen kullanıcı sayısı çok azdır, temeldeki farklı işletim sistemleri arasındaki farkları ortadan kaldırmanın değeri yoktur ve geliştiriciler bunun üzerinde uygulama geliştirmeye istekli değildir.

PC tarayıcıları savaşının bugün vurduğunu biliyoruz, temelde Chrome, Internet Explorer, Safari, Firefox vb. İlginç bir şekilde, mobil tarayıcıların savaş alanı Çin'de başlamış gibi görünüyor.Bu, WeChat tarafından tetiklenen küçük programların savaşı. Esasen tarayıcıların savaşı.

Tarayıcı temel bir yazılımdır ve bir sorunun ne kadar büyük çözebileceği pazar payına bağlıdır. Ancak aynı tarayıcı teknolojisi çekirdeğine dayalı olarak, bir çapraz platform uygulama çerçevesi de oluşturulabilir. React Native'in bu düşünce çizgisini takip ettiğini görüyoruz. Tabii ki, bu tek yol değil ve bazı insanlar QT gibi geleneksel çapraz platform çözümlerine dayanacak.

Genel olarak, bir istemci uygulaması için, tam mimarisi kabaca aşağıdaki gibidir:

Mimarlar için mesele sadece işin nasıl ayrıştırılması gerektiğini düşünme meselesi değil, tüm uygulamanın aşağıdan üst düzey üst yapıya kadar çeşitli kararlar alması gerekiyor. Önce iOS sürümünü mü yapmalıyım yoksa önce uygulamayı mı yapmalıyım? Java mı yoksa Git mi seçmeliyim? Bunların hepsi mimarinin bir parçası.

Sonuç

Bugün, "Bir bilgisayar nasıl çalışır" ile başladık ve programın tüm mimarisine genel bir bakış için birlikte bir kuş bakışı görüntüledik.

Bazı insanlar bugünün içeriğini gördükten sonra biraz endişeli olabilir: "Görünüşe göre bir mimarın bu kadar çok şey öğrenmesi gerekiyor. Görünüşe göre mimar olmaktan çok uzaktayım."

İyi haber şu: Bu endişeyi gidermek için buradayız. Kod yazma yeteneğini dövüş sanatlarıyla karşılaştırırsak, mimari yetenek içsel güç gibidir. İç güç geliştirildikten sonra, dövüş sanatları hareketlerinin kullanımı kullanışlı olabilir. Ve yapı yeteneğinin iyileştirilmesi, temelde bilgi bağlamınızı (vücut meridyeni) tekrar tekrar tarama ve bütünleştirme sürecidir. Mimari düşünceye sahip olmak zor değil ve son derece gerekli. Takımda mimar olsanız da olmasanız da, herhangi bir programcı için mimari düşünceye sahip olmak sizi öne çıkarmanın anahtarı olacaktır.

Bulut bilişim endüstrisinde değilmişsiniz gibi, ancak yine de bulut bilişimin doğasını anlamanız ve bulut bilişim konusunda uzmanlaşmanız gerekiyor. Bir tarayıcı yapmak zorunda değilsiniz, ancak nasıl düşündüklerini anlamanız gerekiyor çünkü onlara derinden bağlısınız.

Daha sonra, bu program mimari sistemindeki her bağlantı hakkında konuşmak için daha da genişleyeceğiz. Bugünün içeriği hakkında herhangi bir düşünceniz ve yorumunuz var mı? Bana bir mesaj bırakmaya hoş geldiniz, birlikte tartışalım. Bir şey kazandığınızı düşünüyorsanız, makaleyi arkadaşlarınızla paylaşabilirsiniz. Dinlediğiniz için teşekkürler, bir dahaki sefere görüşmek üzere.

Yeni sütun | "Xu Shiwei'nin Mimarlık Dersi"

Sınırlı süre 99 , Abonelik indirimleri 30 Yen, 3 gün sonra orijinal fiyatına dönün 129

Makalenin sonundaki tıklayın "daha fazlasını anla" Sütuna abone olun.

Yumurtalar

Sütuna abone olun Operasyon hanımını ekledikten sonra WeChat dididisco , Anahtar kelimeleri yanıtla "Eski Xu" , İçin uygun "Mimarların Seçilmiş 111 Kitabı" .

Tıklamak "daha fazlasını anla" Abonelik sütunu:

Hokkaido bir çiçeğe dönüştü, gelin ve izleyin!
önceki
Guangdongun en utanç verici şehri, eyalet başkentinden daha fazla yabancı nüfusa sahip, ancak şimdi "boş bir şehir" haline geldi
Sonraki
Dünyanın en yüksek dağı, sadece buz ve kar değil, aynı zamanda çok sayıda ceset ve çöp var!
Acı bir ifadeyle "çocuk verme" deneyimi ve buna dayanamama
İki maçta 52 puan kazanın! Rockets'ın 3 koruması var, Alman ve koçların bir yıllık çılgın deneyleri var.
Guangdong turizm yükseltmesi: lezzetli yemekler, ücretsiz seyahat, uluslararası bir eğlence turizm merkezi olmaya uygun
Dünyanın en utanç verici "ülkesi", "kral" her gün kalede yaşıyor ama arazi sadece 3 metrekare
TypeScript'i iki yıl kullandıktan sonra: Tavsiye edilir mi?
Fransız delegasyonu "kutsal yazıları geçmek ve hazineleri göndermek" için Xianju, Zhejiang'ı ziyaret etti: derin bir işbirliği için sabırsızlanıyor
Harden'in iki oyunu ve dörtte üçü girdi ve yol tabelasından 3 metre uzağa uçtu ve ampul kombinasyonu "birer birer değişiyordu"?
Wenchuan depreminde çökmüş olan Sichuan'daki Yunyan Tapınağı Dongyue Salonu, yeniden inşa edildikten sonra yandı.
Tayland'a seyahat etmeyi severim, ancak bazı dükkanların birçok "rutini" olduğunu bilmiyor olabilirsiniz
Afrika'daki koşullar zor, ancak Afrika'da çalışanlar kalkınma için ülkelerine dönmeye isteksizler!
"Owen Card Rescue Pills" son çeyrekte büyük bir geri dönüş yaptı, küçük Pierce'ın ilham kaynağı 38 saniyede iki kez ortaya çıktı
To Top