1. 程式人生 > >微服務架構設計實踐系列之十:技術架構

微服務架構設計實踐系列之十:技術架構

微服務架構設計實踐 
目    次1 序言2 微服務

4.4.4  技術架構

4.4.4.1  技術架構定義

        技術架構定義了實現整個系統所需的各種技術,包括開發類、過程管理類、執行環境類、運維支撐類、以及相關技術規範等。

        更確切地說,技術架構描述了在一個可以獨立部署的應用系統裡,應用、應用平臺、基礎設施之間的關係。

        在技術架構設計過程中,通常採用分層設計模式,把應用、平臺、基礎設施相對獨立地拆分為以下幾層:

        1.系統層,也叫基礎設施層,包括系統級的硬體、軟體兩層:

            底層硬體包括主機、各種伺服器、PC、儲存裝置、網路裝置等;

            第二層系統軟體包括各種作業系統、資料庫等;

        2.平臺層,通常包括兩層,也可以混合成一層:

            下層是中介軟體或技術平臺。中介軟體通常指的是廠家在系統層的基礎上提供的平臺軟體,例如IBM的WebSphere、BEA的Tuxedo等;技術平臺通常指的是使用者自己開發的平臺軟體;

            第二層是基於中介軟體之上的開發框架與執行環境生成平臺,包括各種生成環境與工具:如建模工具、視覺化開發工具、第四代開發語言等;

        3.應用層,包含所有的應用,處於整個技術架構框架的最上層。

        針對不同風格的資料架構和應用架構設計,其實現所需的技術棧是不同的。

        正如序言所述,分行特色業務雲平臺是分散式服務架構向微服務架構的演進,使用更細粒度的服務和一組設計準則來實現大規模的、複雜的系統設計,並非一個純粹的微服務架構風格的專案。

        為了專案後期能順利地遷移到微服務架構,此次的軟體開發完全按照微服務架構的標準進行技術標準的制定和技術選型。

        在進行微服務架構設計過程中,主要從以下幾個方面考慮:

        

 4.4.4.2  技術架構設計原則

4.4.4.2.1  系統執行時原則

        應用或服務在執行時,應該提供如下特徵:

        

 4.4.4.3  技術架構實踐

        分行特色業務雲平臺在實施過程中,由於專案進度、技術棧、研發團隊等方面的約束,基礎實施前期採用虛擬伺服器叢集,後期遷移到行方私有云,技術棧中的其它部分會根據具體情況有所微調,但基本不變。因此,在進行技術架構設計過程中,首先提供一個基於虛擬伺服器叢集的總體技術體系,然後再提供一個採用雲部署的部署方案。

4.4.4.3.1  總體技術體系

        分行特色業務雲平臺的總體技術體系包括在專案整個生命週期過程中,軟體開發人員需要遵循的技術規範,所使用的開發工具,開發、執行、運維過程中的技術、以及貫穿整個軟體生命週期的過程管理工具。

        依據微服務架構的關注點,結合行方目標業務量、研發團隊規模、已有技術平臺、開發語言約束(Java)等因素,所以,分行特色業務雲平臺的Java技術棧的技術選型如下:

        1.服務框架

            選擇Dubbo作為分散式服務框架,Tesla平臺已經整合Dubbo;

            Dubbo提供了高效能和透明化的RPC遠端服務呼叫方案,以及服務治理方案;

        2.執行時支撐服務

            服務註冊中心:採用Zookeeper作為服務註冊中心;

            服務閘道器:自主實現API閘道器,實現通訊協議解析,安全認證,流量控制,資料轉換,協議轉換等功能;

            配置中心:自主實現基於DisConf的配置中心;

            負載均衡:基於F5的硬負載,Dubbo提供的軟負載等;

        3.服務部署平臺

            支援灰度釋出;

            基於行方私有云的容器排程、租戶資源治理;

            半自動化的服務釋出流程(後面詳細描述);

        4.服務執行平臺

            第一階段基於Linux虛擬機器的叢集部署;

            後期遷移到私有云,基於docker容器叢集部署;

        5.服務安全

            基於角色的認證授權機制;

            引入數字證書,對通訊資料進行簽名、驗籤,保證使用者的身份認證、通訊資訊的完整性;

            通過數字簽名和數字時間戳,保證業務操作的不可抵賴性;

        6.服務容錯

            基於Dubbo實現服務的開關、限流、降級、超時等;

        7.服務監控

            基於Logback分級記錄系統執行日誌、業務操作日誌,並定期同步到日誌歸檔平臺;

            通過自定義Spring註解實現服務呼叫鏈日誌記錄;

            整合到Tesla監控平臺,實現分行特色業務雲平臺執行狀態的監控;

        8.後臺服務

            引入ZDAL,實現分散式資料訪問層,支援分庫分表;

            基於Quartz自主實現自動任務排程;

            自主實現本地記憶體快取,採用Redis實現分散式資料快取;

        綜合以上內容,分行特色業務雲平臺的總體技術體系如下圖所示:

         

        1.開發工具

        此次主要採用的開發工具如下:

            IDE:Spring Tool Suite;

            SDK:JDK1.7及以上;

            單元測試:Junit、Mockito;

            整合測試:待定;

            效能測試:JMeter、LoadRunner;

            程式碼生成器:自主研發的CodeGenerator;

            業務流程設計器:自主研發的Activit Designer;

        2.技術規範

        此次涉及的技術規範主要如下:

            平臺開發規範;

            介面設計規範;

            資料庫設計規範;

            統一返回碼規範;

            日誌規範;

            過程管理規範;

            QA規範;

            投產運維規範;

        3.開發、執行環境

        一、WEB前端開發框架

        WEB前端採用Tesla平臺自主研發的TESLA-UI框架,該框架採用時下比較流行的MVVM設計模式,使用SeaJS進行JavaScript模組化管理,提供了基於JQuery的UI元件庫和UI面板庫,以及基於HTML的佈局模板,適用於企業管理型別前臺頁面的開發。

        二、服務開發框架 

        後臺服務採用行方自主研發的Tesla平臺,該平臺採用“微核心”+“元件”設計,穩定的核心保證系統的健壯性,豐富的元件保證系統的靈活性、擴充套件性。

        TESLA定義了良好的擴充套件機制和統一的模組互動機制,能夠定製化地為應用系統提供各種基礎功能,例如:IoC容器、資料訪問、MVC框架、快取、工作流、服務編排、系統整合、服務治理等等。

        TESLA融合了諸多網際網路領域的技術,包括高併發的Web服務端技術(WebX、SpringExt)、服務化架構下的服務治理技術(Dubbo)、大資料量分庫分表技術(ZDAL)、分散式快取技術(Redis、Memcached)、高效能資料來源連線池技術(Druid)、分散式配置管理技術(Disconf)等等。

        另外,TESLA具有應對金融領域業務系統複雜性的能力,在業務快速整合與分散式事務資料一致性處理上做了很多支援。

        TESLA框架分層如下:

        1.渠道層:負責接收客戶端發來的請求,不同的協議可以啟用不同的渠道,比如有http、webservice、Socket等。

        2.業務功能層:抽象業務功能處理的概念,Function代表一個業務功能,Filter是過濾器(可以設定在不同的作用域,比如Function級別,Function組級別,整個應用級別)、Action是Function中執行的每一個活動,Context是整個架構的資料載體,PamameterProcesser是引數處理器,用於引數進行校驗和轉換。

        3.服務成層:Tesla採用“微核心”+“元件”設計,所有的服務元件都在這一層,都是開發中常用的一些基礎功能,比如分頁、快取、工作流引擎、服務編排引擎、序列號生成器等。

        4.整合層:負責和外部系統進行互動,RPC呼叫、Ftp、訊息中介軟體等,同時納入到服務治理體系。

        5.開發工具集:全棧程式碼生成器,服務客戶端程式碼生成器、業務流程設計器等。

        6.資料訪問層:負責DAO資料庫SQL操作(基於Mybatis)、管理資料庫連線池、事務、基於ZDAL進行分庫分表。

        7.基礎設施:面向運維的一些支援設施,無需額外開發,如統一應用監控中心、配置管理中心、服務註冊中心、異常處理平臺整合等。

        三、中介軟體和技術平臺

        1.應用伺服器

            開發環境、單元測試環境:Tomcat7及以上;

            整合測試環境、UAT測試環境、生產環境:Weblogic10;

        2.WEB伺服器

            開發環境、單元測試環境:Tomcat7及以上;

            整合測試環境、UAT測試環境、生產環境:Apache,Nginx;

        3.分散式資料一致性管理

            Zookeeper;

        4.快取

            Redis

        5.容器

            Docker

        6.JVM

            開發環境、單元測試環境:Sun Hotspot 1.7及以上;

            整合測試環境、UAT測試環境、生產環境:JRockit 7及以上;

        四、系統軟體平臺

            1.資料庫

                總行:DB2 10及以上;

                分行:根據分行具體情況任選其一:DB2、MySQL、Oracle;

            2.作業系統

                DB2資料庫伺服器:IBM AIX;

                其它伺服器:SUSE Linux;

        五、系統硬體平臺

            1.使用行方現有的虛擬化伺服器;

        4.過程管理

        此次主要採用的過程管理工具如下:

            專案構建:Maven;

            版本控制:SVN;

            構件倉庫:Nexus;

            缺陷跟蹤:JIRA;

            程式碼審查:FishEye、Crucible;

            知識管理:Confluence;            

            持續整合、持續交付:Bamboo;

4.4.4.3.2  持續整合、持續交付

        上述章節介紹了分行特色業務雲平臺的總體技術體系,在此,針對貫穿整個專案實施過程,保證專案質量、專案實施進度,減少專案實施風險的軟體過程管理中的持續整合和持續交付的流程進行詳細地說明,以便指導和約束整個軟體實施過程。

        正如本文《軟體架構設計思想》章節中描述的,架構的本質就是通過“分“與”合“的手段,對系統進行有序化重構,不斷減少系統無序的程度,使系統不斷進化。

        從一個簡單的單體應用到分散式應用,再到更為複雜的微服務架構,除了關心如何拆、怎麼拆的問題,還必須關注如何控制拆的風險、如何保證程式碼質量、如何保證功能符合使用者需求等。

        解決上述問題的手段就是整合,從一開始就整合,並且不斷的整合,反覆的將拆分的子系統、模組、元件重新組合,看看是否能夠順利組合起來,並且保證功能的不變。

        實現上述不斷地整合以及成果物交付的過程就是持續整合和持續交付:

        1.持續整合:指對程式碼的提交,構建,測試的過程,這是一個持續、反覆的過程。

        2.持續交付:指將整合好的交付物,例如war、jar或者容器映象,部署在聯調環境,或者預發環境的過程。

        以下是本專案採用的一個持續整合、持續交付的過程,研發團隊在專案實施過程中要嚴格遵守:
         

        持續整合、持續交付的基本流程如下:

            1.程式碼開發,完成分配的任務。

            2.每天提交程式碼,降低程式碼整合的風險。採用SVN的提交方式,後提交者有責任去merge,保證程式碼的編譯通過和測試通過。

            3.專人定期稽核提交的程式碼,把控程式碼質量。

            4.程式碼稽核完畢之後,觸發編譯過程,完成程式碼編譯。

            5.編譯完成,進行單元測試。要求每個類都要有單元測試,並且單元測試覆蓋率要達到一定的指標。單元測試要有帶Mock的模組內的整合測試。如果單元測試不通過,則統計後發郵件,抄送所有的人。

            6.單元測試通過以後,上傳成果物(war、jar或其它)至Nexus私服。

            7.如果採用私有云,並且使用docker容器,則需要編譯Dockerfile,使用Docker映象作為交付,能夠實現更好的環境一致性,保證原子的升級和回滾。

            8.每天下班前,當天的程式碼需要提交到庫中去,晚上會做一次統一的環境部署和整合測試。這個整合測試或者叫回歸測試每天晚上都做,都是在一個全新的環境中。如果某一天測試不通過,則會發郵件通知。

            9.一個週期完畢,進行UAT測試。如果測試不通過,則會發郵件通知,開發人員要及時更正。

           10.UAT測試通過以後,準備上線到生產環境。建議採用灰度釋出或藍綠髮布機制,分批次釋出、切換流量。一般情況下,具有許可權的管理人員通過自動化指令碼進行部署。

        通過持續整合、持續交付這套完整的流程,層層保證質量,保證專案可以按時按質的完成,減少專案的實施風險。

  微信掃一掃,關注該公眾號

  該系列文章已經在微信公眾號釋出,如果感興趣,請關注。

   以後更多知識通過該微信公眾號分享。


相關推薦

服務架構設計實踐系列技術架構

微服務架構設計實踐 目    次1 序言2 微服務4.4.4  技術架構4.4.4.1  技術架構定義        技術架構定義了實現整個系統所需的各種技術,包括開發類、過程管理類、執行環境類、運維支撐類、以及相關技術規範等。        更確切地說,技術架構描述了在一個

服務架構設計實踐系列物理架構

微服務架構設計實踐 目    次1 序言2 微服務4.4.5  物理架構4.4.5.1  物理架構定義        物理架構定義了“程式”如何對映(安裝、部署或燒寫等)到“硬體”,以及“資料“如何在”硬體“上儲存和傳遞。        物理架構必須考慮”功能的分佈“和”資料

服務架構設計實踐系列架構準備階段

微服務架構設計實踐 目    次1 序言2 微服務4.2  架構準備階段        在架構準備階段,主要是分析使用者的需求,推薦採用“ADMEMS矩陣”矩陣方法進行需求結構化,即“需求層次-需求方面矩陣”。        通過業務級需求、使用者級需求、開發級需求三個層次,

設計模式系列享元模式

1.定義 使用共享物件可有效的支援大量的細粒度的物件。 享元模式是池技術的重要實現方式,享元模式的定義為我們提出了兩個要求,細粒度物件和共享物件。我們知道分配太多的物件到以程式中將有損程式的效能,還會造成記憶體溢位,享元模式正是為此而生的。 說到細粒度物件

skyfans每天一個Liunx命令系列top

今天我們繼續來學習PERFORMANCE MONITORING AND STATISTICS(效能監測與統計),今天學習的是什麼命令呢,那就是top(顯示管理程序內容相關資訊) 明天是S8總決賽,IG作為中國戰隊代表出站,希望IG能獲得冠軍,那計劃明天為了給IG加油,打算更新5篇部落格內

Docker系列Docker Compose的使用

系列連結 Docker系列之一:Docker介紹及在Ubuntu上安裝 Docker系列之二:Docker 入門 Docker系列之三:使用Docker映象和倉庫 Docker系列之四:Dockerfile的使用 Docker系列之五:Volume 卷的使用——以Redis為例

簡單的程式詮釋C++ STL算法系列search

      C++STL的非變易演算法(Non-mutating algorithms)是一組不破壞操作資料的模板函式,用來對序列資料進行逐個處理、元素查詢、子序列搜尋、統計和匹配。       search演算法函式在一個序列中搜索與另一序列匹配的子序列。它有如下兩個原型

Java併發程式設計系列synchronized(1)

在多執行緒併發訪問資源(這類資源稱為臨街資源)的時候,由於割裂來了原子操作,所以會導致資料不一致的情況。為了避免這種情況,需要使用同步機制,同步機制能夠保證多執行緒併發訪問資料的時候不會出現資料不一致的情況。 一種同步機制是使用synchronized關鍵字,

設計模式系列抽象工廠模式

前言 在設計模式有三個模式是與工廠模式相關的,分別是:簡單工廠模式、工廠方法模式以及抽象工廠模式。在前面的文章中已經談到前面兩種,這裡就對抽象工廠模式介紹一下。抽象工廠模式就是提供一個建立一系列相關或者相互依賴的介面(也就是抽象類),而無需指定具體的類。簡單來

ZooKeeper系列ZooKeeper的一致性保證及Leader選舉

1)一致性保證 Zookeeper 是一種高效能、可擴充套件的服務。 Zookeeper 的讀寫速度非常快,並且讀的速度要比寫的速度更快。另外,在進行讀操作的時候, ZooKeeper 依然能夠為舊的資料提供服務。這些都是由於 ZooKeepe 所提供的一致性保證,它具有如下特點: 順序一致性

Chrome瀏覽器擴充套件開發系列桌面通知Notification

Desktop Notification也稱為Web Notification,是在Web頁面之外,以彈出桌面對話方塊的形式通知使用者發生了某事件。Web Notification於2015.9.10成為W3C推薦標準,網址https://www.w3.org/TR/no

設計模式系列建造者模式

1.定義 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 2.通用類圖 Product 產品類:表示被構造的複雜物件。通常實現了模板方法模式,也就是有基本方法和模板方法 Builder 抽象建造者:規範產品的元件,一

設計模式系列工廠模式(Factory Pattern)

這是本系列的第三篇部落格,這次主要來說一下工廠模式。 基本工廠模式 簡單來說工廠模式是將工程中的相同型別物件的建立活動集中管理,一般通過反射來生成外界需要的實體類。比如Spring中的容器Bean概念,通過Spring BeanFactory來產生不同的Be

Scrum實踐系列我們怎麼開每日站會

一開始Scrum實踐時,我們選擇了JIRA上電子化的敏捷看板,它可以根據不同團隊的需要定製看板上的狀態、分類、顯示方式等,可以說電子看板的功能著實很強大。但一段時間下來,我們發現團隊間互動的效果不甚理想,站會上大家面對著電腦自顧自的說,有人看電腦處理自己的事,有人低頭玩手機,輪到自己了就對著電腦巴拉巴拉一通

網購秒殺系統架構設計案例分析——《大型網站技術架構》筆記

一、核心思想: 網站秒殺時的併發比正常運營時多的多,所以網站的秒殺業務不能使用正常的網站業務流程,也不能和正常的網站交易業務共用伺服器(否則造成巨大浪費),必須設計部署專門的秒殺系統,進行專門應對   二、技術挑戰: 1.對現有網站業務造成衝擊:秒殺活動只是網站營銷的一個附加活動,具有時間短

基於Kubernetes的機器學習服務系統設計系列——(二)架構與部署

 內容提要 1 系統介紹 1.1 核心功能 2 系統架構 2.1 雲化架構圖 2.2 架構說明 3 雲化部署 3.1 部署圖 3.2 部署說明 3.3 部署例項

基於Kubernetes的機器學習服務系統設計系列——()資料視覺化

 內容提要 資料視覺化 視覺化演示 資料視覺化   應用訪問介面如圖所示: 應用服務UI介面 包括: 微服務配置、分類任務配置; 微服務資源監控,動態顯示; 資料集分析圖、分類對比圖;

.net core實踐系列簡訊服務-架構優化

前言 通過前面的幾篇文章,講解了一個簡訊服務的架構設計與實現。然而初始方案並非100%完美的,我們仍可以對該架構做一些優化與調整。 同時我也希望通過這篇文章與大家分享一下,我的架構設計理念。 原始碼地址:https://github.com/SkyChenSky/Sikiro.SMS/tree/opti

基於Kubernetes、Docker的機器學習服務系統設計系列——(二)架構與部署

  本篇主要介紹基於Kubernetes、容器(Docker)、微服務技術等在機器學習中的實踐應用的架構與部署。 1 系統介紹 1.1 核心功能   主要完成功能: 支援Docker映象化釋出,支援Kuberneetes雲化部署; 微服務化設計支援服務自治

程序設計基石與實踐系列按值傳遞還是按引用

有趣 name align pos str 堆棧 技術分享 easy pan 從簡單的樣例開始.如果我們要交換兩個整形變量的值,在C/C++中怎麽做呢?我們來看多種方式,哪種能夠做到.void call_by_ref(int &p,int &q) { //