1.1 Arka uç altyapısı
Java arka uç teknolojisini kullanmanın amacı, kullanıcılara çevrimiçi veya çevrimdışı hizmetler sağlamak için iş uygulamaları oluşturmaktır. Bu nedenle, bir iş uygulamasının hangi teknolojilere ve hangi altyapıya ihtiyaç duyduğu, hangi arka uç teknolojilere hakim olunması gerektiğini belirler. Yazar, şirketin mevcut durumu ile birlikte tüm İnternet teknolojisi sistemine bakıldığında, vazgeçilmez veya çok kritik olan arka uç temel teknolojilerin / tesislerin aşağıdaki şekilde gösterildiğine inanmaktadır:
Buradaki arka uç altyapısı, temel olarak uygulamaların kararlı çevrimiçi çalışma için güvenmesi gereken temel bileşenlere veya hizmetlere atıfta bulunur. Yukarıdaki arka uç altyapısının geliştirilmesi veya kurulması, genellikle işi uzun bir süre destekleyebilir. Ek olarak, eksiksiz bir mimari için yük dengeleme, otomatik dağıtım ve sistem güvenliği gibi uygulamalar tarafından algılanmayan ve bu bölümün kapsamına girmeyen birçok temel sistem hizmeti vardır.
Mobil APP geliştirme sürecinde, genellikle arka uç tarafından sağlanan arayüz aşağıdaki işlevlerin desteğine ihtiyaç duyar:
Genel yaklaşım, yük dengeleme için Nginx kullanmak ve ardından her iş uygulamasında API arabirimi erişim kontrolü ve kullanıcı kimlik doğrulaması yapmaktır.Daha optimize bir yol, tüm iş çağrıları için son iki halk kitaplığını yapmaktır. Ancak genel bir bakış açısıyla, bu üç özellik işletmenin ortak ihtiyaçlarına aittir.Daha tercih edilen yol, otorite kontrol ve kimlik doğrulama mekanizmasını dinamik olarak değiştirebilen ve her işletmenin entegrasyonunu azaltabilen bir hizmet olarak bir araya getirmektir. Mekanizmanın maliyeti. Bu tür bir hizmet bir API ağ geçididir ve bunu kendiniz uygulamayı seçebilirsiniz. Ayrıca Kong ve Netflix Zuul gibi açık kaynaklı yazılımlar kullanılarak da uygulanabilir. API ağ geçidinin genel yapısı aşağıdaki şekilde gösterilmektedir:
Ancak yukarıdaki şemayla ilgili bir sorun, tüm API isteklerinin ağ geçidinden geçmesi gerektiğinden, sistemin kolayca bir performans darboğazı haline gelebilmesidir. Bu nedenle, benimsenebilecek çözüm şudur: API ağ geçidini kaldırın, iş uygulamalarının doğrudan birleşik sertifika merkezine bağlanmasına izin verin ve her API çağrısının birleşik sertifika merkezinin sertifikasını temel çerçeve düzeyinde geçmesini sağlayın. Burada, kimlik doğrulama sonucu önbelleğe alınabilir. Birleşik sertifika merkezi, aşırı talep baskısı oluşturur.
İş uygulamaları, çevrimiçi iş uygulamaları ve dahili iş uygulamaları olarak ikiye ayrılır.
İş uygulamaları, temel arka uç çerçevesine göre geliştirilir. Java arka uç için aşağıdaki çerçeveler olmalıdır:
Genel olarak konuşursak, yukarıdaki birkaç çerçeve, bir arka uç uygulamasının prototipini tamamlayabilir.
Önbellekler, veritabanları, arama motorları ve mesaj kuyrukları, uygulamaların dayandığı arka uç temel hizmetlerdir. Performansları doğrudan uygulamanın genel performansını etkiler. Bazen kodunuz daha iyi olabilir çünkü bu hizmetler uygulama performansının başarısız olmasına neden olur. Yükselin.
Bir iş uygulaması, bağımlı bir arka uç hizmeti veya çeşitli diğer hizmetler, sonuçta temeldeki dosya depolamasına bağlıdır. Genel olarak, dosya depolamanın karşılaması gereken özellikler şunlardır: güvenilirlik, felaket toleransı ve istikrar, yani saklanan verilerin bir arıza olsa bile kolayca kaybolmamasını sağlamak, bir geri alma planı olabilir ve yüksek kullanılabilirlik sağlanmalıdır. Alt katmanda, geleneksel RAID'i bir çözüm olarak kullanabilirsiniz ve bir sonraki aşamada, Hadoop'un HDFS'si en yaygın dağıtılmış dosya depolama çözümüdür.Elbette, NFS ve Samba gibi paylaşılan dosya sistemleri de basit dağıtılmış depolama sağlar. Özellikler.
Buna ek olarak, dosya depolaması uygulamanın darboğazı haline gelirse veya tüm sistemin performansını iyileştirmek için dosya depolama performansının iyileştirilmesi gerekiyorsa, en doğrudan ve basit yol geleneksel mekanik sabit diski terk etmek ve bir SSD sabit diskle değiştirmektir. Artık birçok şirket iş performansı sorunlarını çözdüğünde, nihai anahtar nokta genellikle SSD'dir. Bu aynı zamanda zaman ve işçilik maliyetleri için para takas etmenin en doğrudan ve etkili yoludur. Veritabanı bölümünde açıklanan SSDB, LevelDB paketlendikten sonra SSD sabit disklerin özelliklerini kullanan yüksek performanslı bir KV veritabanıdır.
HDFS'ye gelince, yukarıdaki verileri kullanmak istiyorsanız, Hadoop'tan geçmeniz gerekir. Xx on Yarn gibi bazı teknolojiler, HDFS üzerinde Hadoop dışı teknolojileri çalıştıran çözümlerdir.
Birleşik kimlik doğrulama merkezi temel olarak APP kullanıcıları, dahili kullanıcılar, APP vb. İçin kimlik doğrulama hizmetleri sağlar.
Birleşik bir sertifika merkezine duyulan ihtiyacın nedeni, tüm bu uygulamalar tarafından kullanılan bilgileri merkezi olarak yönetmek ve tüm uygulamalar için birleşik sertifika hizmetleri sağlamaktır. Özellikle kullanıcı verilerini paylaşması gereken birçok işletme olduğunda, birleşik bir kimlik doğrulama merkezi oluşturmak çok gereklidir. Buna ek olarak, birleşik bir kimlik doğrulama merkezi aracılığıyla mobil uygulamalar için tek bir oturum açma oluşturmak elbette bir meseledir: Web mekanizmasını taklit etmek, kimliği doğrulanmış bilgileri şifrelemek ve birden fazla uygulamanın kullanılması için yerel depolamada saklamak.
Şu anda, birçok büyük çevrimiçi Web sitesinde tek oturum açma sistemleri vardır Genel olarak konuşursak, birden çok iş uygulamasına girmek için yalnızca bir kullanıcının oturum açması gerekir (izinler farklı olabilir) ve bu, kullanıcıların çalışması için çok uygundur. Mobil İnternet şirketlerinde, çeşitli dahili yönetim, bilgi sistemleri ve hatta harici uygulamalar da tek oturum açma sistemleri gerektirir.
Şu anda, daha olgun ve en çok kullanılan tek oturum açma sistemi, https://github.com/apereo/cas/tree/master/cas-server-webapp'a göre özelleştirilebilen Yale Üniversitesi'nin açık kaynaklı CAS'ı olmalıdır.
Temel olarak, tek oturum açma ilkesi aşağıdaki şekle benzer:
Java arka uç uygulamalarında, yapılandırmayı okumanın ve yazmanın daha yaygın bir yolu, yapılandırma dosyalarını Özellikler, YAML, HCON ve diğer dosyalara yazmaktır.Değiştirirken, yalnızca dosyayı güncellemeniz ve yeniden konuşlandırmanız gerekir; bu, kod düzeyini dahil etmeden yapılabilir. Değişimin amacı. Birleşik yapılandırma merkezi, tüm iş veya temel arka uç hizmetleriyle ilgili yapılandırma dosyalarını tek tip olarak yöneten, bu yöntemi temel alan birleşik bir hizmettir. Aşağıdaki özelliklere sahiptir:
Baidu'nun açık kaynaklı Disconf ve Ctrip'in Apollo'su, üretim ortamında kullanılabilen çözümlerdir.Ayrıca kendi konfigürasyon merkezinizi kendi ihtiyaçlarınıza göre geliştirebilir ve konfigürasyon depolaması olarak genellikle Zookeeper'ı seçebilirsiniz.
Harici API çağrıları veya arka uç API'ye istemci erişimi için HTTP protokolü veya RESTful kullanılabilir (tabii ki doğrudan en ilkel soket aracılığıyla da çağrılabilir). Bununla birlikte, dahili hizmetler arasındaki çağrılar genellikle RPC mekanizması aracılığıyla çağrılır. Mevcut genel RPC protokolleri şunlardır:
Bu RPC protokollerinin kendi avantajları ve dezavantajları vardır ve iş ihtiyaçları için en iyi seçimi yapmanız gerekir.
Bu şekilde, sistem hizmetleriniz kademeli olarak arttığında, RPC çağrı zinciri gittikçe daha karmaşık hale gelir.Birçok durumda, bu çağrı ilişkilerini sürdürmek için belgeyi sürekli güncellemeniz gerekir. Bu hizmetleri yönetmek için bir çerçeve, bunun neden olduğu hantal insan gücünü büyük ölçüde azaltabilir.
Geleneksel ESB'nin (Kurumsal Hizmet Veriyolu) özü bir hizmet yönetişim çözümüdür, ancak ESB'nin bir proxy olarak rolü İstemci ve Sunucu arasında mevcuttur ve tüm taleplerin ESB'den geçmesi gerekir, bu da ESB'yi kolayca bir performans darboğazı haline getirir. Bu nedenle, geleneksel ESB'ye dayalı olarak, aşağıdaki şekilde daha iyi bir tasarım gösterilmektedir:
Şekilde gösterildiği gibi, konfigürasyon merkezi hub olarak kullanıldığında, çağrı ilişkisi yalnızca İstemci ile hizmeti sağlayan sunucu arasında mevcuttur ve bu da geleneksel ESB'nin performans darboğaz sorununu ortadan kaldırır. Bu tasarım için ESB'nin desteklemesi gereken özellikler aşağıdaki gibidir:
Alibaba'nın açık kaynak Dubbo'su yukarıdakileri çok iyi uyguladı ve aynı zamanda birçok şirketin şu anda kullandığı bir çözüm; Dangdang'ın genişletilmiş projesi Dubbox, Dubbo'ya bazı yeni özellikler ekledi. Şu anda Dubbo, Ali tarafından Apache'ye katkıda bulunmuştur ve kuluçka aşamasındadır. İşletme ve bakım izleme açısından Dubbo'nun kendisi basit bir yönetim konsolu dubbo-admin ve dubbo-monitor-simple izleme merkezi sağlar. Github'daki dubboclub / dubbokeeper, yönetimi ve izlemeyi entegre eden daha güçlü bir hizmet yönetimi ve izleme sistemidir.
Buna ek olarak, Netflix'in Eureka'sı hizmet kaydı keşfi işlevini de sağlar.Hizmetin istemci yumuşak yük dengelemesini gerçekleştirmek ve çeşitli esnek dinamik yönlendirme ve yük dengeleme stratejilerini desteklemek için Ribbon ile işbirliği yapabilir.
Birçok işletmede, planlı planlama, verileri düzenli olarak getirmek ve siparişlerin durumunu düzenli olarak yenilemek gibi çok yaygın bir senaryodur. Genel yaklaşım, kendi işleri için Java'daki Linux veya Quartz'ın Cron mekanizmasına güvenmektir. Birleşik planlama merkezi, tüm zamanlama görevlerini yönetir, böylece planlama kümesini tek tip bir şekilde optimize edebilir, genişletebilir ve yönetebilir. Azkaban ve Yahoo'nun Oozie'si, Hadoop'un akışlı iş yönetimi motorlarıdır ve aynı zamanda birleşik bir planlama merkezi olarak da kullanılabilir. Elbette, kendi birleşik sevk merkezinizi uygulamak için Cron veya Quartz'ı da kullanabilirsiniz.
Java Quartz için açıklamamız gerekiyor: Bu Quartz'ın, Spring'in Quartz çerçevesinin basit bir uygulaması olan ve şu anda en çok kullanılan zamanlama yöntemi olan Spring Quartz'dan ayırt edilmesi gerekiyor. Ancak yüksek kullanılabilirlikli kümeleri desteklemez. Quartz'ın küme desteği olmasına rağmen, yapılandırması çok karmaşıktır. Pek çok çözüm artık Spring Quartz dağıtılmış kümeleri uygulamak için Zookeeper'ı kullanıyor.
Ek olarak, Dangdang.com'un açık kaynaklı esnek işi, temel dağıtılmış zamanlamaya esnek kaynak kullanımı gibi daha güçlü işlevler ekler.
Günlükler, geliştirme süreci için çok önemlidir. Günlüğü yazdırmanın zamanlaması ve becerisi, mühendisin kodlama seviyesini yansıtabilir. Sonuçta, günlükler, çevrimiçi hizmetlerin anormallikleri bulup giderebileceği en doğrudan bilgilerdir.
Genellikle, günlükleri çeşitli işletmelerde dağıtarak sorunları yönetmek ve gidermek çok sakıncalıdır. Birleşik günlük hizmeti, günlükleri kaydetmek için ayrı bir günlük sunucusu kullanır ve her işletme, birleşik bir günlük çerçevesi aracılığıyla günlük sunucusuna günlükler çıkarır.
Log4j veya Logback Appender uygulayarak birleşik bir günlük çerçevesi uygulayabilir ve ardından günlüğü RPC çağrıları aracılığıyla günlük sunucusuna yazdırabilirsiniz.
Veriler, son yıllarda çok sıcak bir alan. "Yalın Veri Analizinden" "Growth Hacking" e kadar hepsi, verilerin olağanüstü rolünü vurguluyor. Birçok şirket, ürün tasarımını, pazar operasyonlarını ve araştırma ve geliştirmeyi teşvik etmek için de verileri kullanıyor. Burada dikkat edilmesi gereken bir nokta, büyük veriyle ilgili teknolojileri yalnızca verilerinizin ölçeği gerçekten tek bir makinenin başa çıkamayacağı bir ölçeğe ulaştığında kullanmanız gerektiğidir. Büyük veri için büyük veriyi kullanmayın. Çoğu durumda, bağımsız bir program + MySQL kullanılarak çözülebilecek sorun, zaman ve insan gücü kaybı olan Hadoop olmalıdır.
Burada eklenmesi gereken, birçok şirket için, özellikle daha az yoğun çevrimdışı işi olanlar için, büyük veri kümelerinin kaynaklarının birçok durumda israf edilmesidir. Bu nedenle, Hadoop dışı teknolojilerin Dockeron Yarn gibi kaynak kullanımını büyük ölçüde artırabilen büyük veri kümelerinin kaynaklarını kullanabilmesi için İplik teknolojileri üzerine bir dizi xx doğmuştur.
Yukarıda bahsedilen birleşik günlük hizmetini takiben, çıktı günlüğü en sonunda sonraki veri işleme programları tarafından tüketilmek üzere veri yoluna veri haline gelecektir. Ara süreç, günlük toplama ve iletimini içerir.
Ek olarak, burada önemli bir teknoloji var, veritabanı ile veri ambarı arasında veri senkronizasyonu sorunu, yani analiz edilmesi gereken verilerin veritabanından Hive gibi bir veri ambarına senkronize edilmesi. Verileri zaman damgalarına göre senkronize etmek için Apache Sqoop'u kullanabilirsiniz.Ayrıca, Alibaba'nın açık kaynaklı Canal'ı, genel senkronizasyon senaryoları için daha uygun olan, ancak Canal'a dayalı olan binlog'a dayalı artımlı senkronizasyon uygular, ancak yine de birçok iş geliştirme çalışmasının yapılması gerekiyor.
Çevrimdışı veri analizi geciktirilebilir.Genelde gerçek zamanlı ihtiyaçlarda olmayan veri analizi çalışmalarını hedefler ve bir gün gecikmeli raporlar üretir. Hadoop'a ek olarak, Spark en yaygın kullanılan çevrimdışı veri analizi teknolojisidir. Hadoop ile karşılaştırıldığında, Spark büyük performans avantajlarına sahiptir ve elbette yüksek donanım kaynakları da gerektirir. Bunların arasında, bir kaynak yönetimi planlama bileşeni olarak Hadoop'ta Yarn, MR hizmetine ek olarak Spark (Spark on Yarn) içinde kullanılabilir ve Mesos başka bir kaynak yönetimi planlama sistemidir.
Hadoop için geleneksel MR yazımı çok karmaşıktır ve bakım için elverişli değildir. SQL yerine MR yazmak için Hive'ı kullanmayı seçebilirsiniz. Spark için Hive'a benzer Spark SQL var.
Ek olarak, çevrimdışı veri analizi için, çok kritik bir veri çarpıklığı sorunu da vardır. Sözde veri çarpıklığı, bir bölgedeki verilerin eşit olmayan dağılımını ifade eder, bu da bazı düğümlerin düşük yüke sahip olmasına neden olurken, bazılarının yüksek yüke sahip olmasına neden olur ve bu da genel performansı etkiler. Veri çarpıklığı probleminin üstesinden gelmek, veri işleme açısından kritiktir.
Çevrimdışı veri analizi ile karşılaştırıldığında, gerçek zamanlı veri analizi, çevrimiçi veri analizi olarak da adlandırılır.Reklam yerleşimi ve sipariş mutabakatı gibi gerçek zamanlı veriler gerektiren iş senaryolarına yöneliktir. Şu anda, daha olgun gerçek zamanlı teknolojiler arasında Storm ve Spark Streaming bulunmaktadır. Storm ile karşılaştırıldığında, Spark Streaming temelde toplu hesaplamaya dayalıdır. Gecikmeye duyarlı bir sahneyse, yine de Storm kullanılmalıdır. Bu ikisine ek olarak, Flink son zamanlarda popüler olan bir dağıtılmış gerçek zamanlı hesaplama çerçevesidir. Exactly Once'ın anlamını destekler, büyük miktarda veri altında yüksek verim ve düşük gecikme avantajlarına sahiptir ve durum yönetimi ile pencere istatistiklerini iyi bir şekilde destekleyebilir. , Ancak belgelerinin ve API yönetim platformunun hala iyileştirilmesi gerekiyor.
Gerçek zamanlı veri işleme genellikle, çevrimdışına kıyasla güvenilir olmayan artımlı işlemeye dayanır. Bir arıza (küme çökmesi gibi) veya veri işleme başarısız olduğunda, verileri kurtarmak veya anormal verileri onarmak zordur. Bu nedenle, çevrimdışı + gerçek zamanı birleştirmek şu anda en yaygın kullanılan veri işleme çözümüdür. Lambda mimarisi, çevrimdışı ve gerçek zamanlı veri işlemeyi birleştiren bir mimari çözümdür.
Ek olarak, gerçek zamanlı veri analizinde çok yaygın bir senaryo vardır: çok boyutlu verilerin gerçek zamanlı analizi, yani veri görüntüleme ve analiz için herhangi bir boyutu birleştirme yeteneği. Şu anda bu sorunun iki çözümü vardır: ROLAP ve MOLAP.
Önceki bölümde belirtildiği gibi, çoğu durumda, ROLAP çözümleri çevrimdışı veri analizi için gerçek zamanlı gereksinimleri karşılayamaz.Bu nedenle, MOLAP, çok boyutlu verilerin gerçek zamanlı analizi için ortak bir çözümdür. Yaygın olarak kullanılan üç çerçeve için karşılaştırma aşağıdaki gibidir:
Sahne dili protokol özelliklerini kullanın Druid gerçek zamanlı işleme ve analiz JavaJSON gerçek zamanlı toplama Pinot gerçek zamanlı işleme analizi JavaJSON gerçek zamanlı toplama KylinOLAP analiz motoru JavaJDBC / OLAP ön işleme, önbellek
Bunlar arasında, Druid nispeten hafiftir, daha fazla insan kullanır ve daha olgun.
Çevrimdışı ve gerçek zamanlı veri analizi ile oluşturulan bazı raporlar, veri analistleri ve ürün yöneticileri tarafından referans olarak kullanılır, ancak çoğu durumda, çevrimiçi programlar bu talep edenlerin ihtiyaçlarını karşılayamaz. Şu anda, talep tarafının veri ambarını kendi kendine sorgulaması gerekiyor. Bu talepte bulunanlar için SQL, kullanımı ve tanımlaması kolay olduğu için en uygun yöntem olabilir. Bu nedenle, bir SQL ad hoc sorgu aracı sağlamak, veri analistlerinin ve ürün yöneticilerinin iş verimliliğini büyük ölçüde artırabilir. Presto, Impala ve Hive bu tür araçlardır. Talep edene daha sezgisel bir UI işlem arayüzü sağlamak istiyorsanız, dahili bir Hue oluşturabilirsiniz.
Kullanıcı odaklı çevrimiçi hizmetler için başarısızlık ciddi bir konudur. Bu nedenle, çevrimiçi hizmetler için iyi bir arıza tespiti ve alarm işi yapmak çok önemlidir. Hata izleme, aşağıdaki iki izleme seviyesine ayrılabilir:
İzlemede bir diğer önemli adım uyarı vermektir. Uyarı vermenin birçok yolu vardır: e-posta, anlık mesajlaşma, SMS vb. Hataların farklı önemi, alarmların rasyonelliği ve sorunların bulunmasındaki kolaylık göz önüne alındığında aşağıdaki önerilerimiz var:
Arıza alarmından sonra, en kritik şey bununla ilgilenmektir. Yeni kurulan firmalar için 24 saat bekleme gerekli bir kalitedir.Bir alarmla karşılaşıldığında, arızaya en kısa sürede cevap vermesi, sorunu bulması ve kontrol edilebilir bir süre içerisinde sorunu çözmesi gerekir. Sorun giderme için temel olarak günlüklere güvenin. Günlük düzgün bir şekilde yazıldığı sürece, normal koşullar altında sorun hızlı bir şekilde tespit edilebilir, ancak bu dağıtılmış bir hizmetse ve günlük verilerinin miktarı özellikle büyükse, günlüğün nasıl bulunacağı bir sorun haline gelir. Birkaç seçenek var:
Konu hakkında konuşmak gerekirse, Brother Bird atmayı seven bir programcıdır.Amatör olarak kendi web sitesini, küçük programını, Uygulamasını vb. Son zamanlarda, sunucular teması etrafında bir WeChat grubu oluşturuldu.Sunucu oynamayı seven veya kendi başına bir ürün geliştirmek isteyen okuyucular içeri girip birbirlerinden öğrenebilirler! Ayrıca size zaman zaman sunucuyla ilgili kuponlar da getireceğim! Eğer ilgilenmiyorsan, atmayı sevmiyorsan, belaya katılmana gerek yok!