1. 程式人生 > >初識華為開源專案 ServiceComb

初識華為開源專案 ServiceComb

內容來源:2017年10月26日,華為PaaS開源領域專家姜寧在“ServiceComb線上直播”進行《ServiceComb 開源專案介紹》演講分享。IT 大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出

摘要

本文將向介紹ServiceComb開源專案的整體架構及特點、ServiceComb Release 0.3.0的增強功能、基於ServiceComb介紹參與軟體開源開發的途徑和方法。

企業應用微服務開發面臨的問題

企業業務邏輯複雜,如何進行跨團隊協同開發?

大量老舊系統程式碼,如何支援其快速服務化改造?

雲化應用複雜,面臨的監控分佈呼叫追蹤問題?

ServiceComb作為一個功能完善的微服務框架,包括應用框架程式碼生成,服務註冊發現、服務配置管理、服務監控、服務呼叫追蹤、多通訊協議支援等功能,為開發者提供端到端的應用開發體驗。此外,ServiceComb具備服務化契約增強、事件驅動等優勢特性,並提供了分散式事務追蹤能力,能夠比較好的解決上述企業應用微服務開發所遇到的問題。ServiceComb採用開放架構設計理念,相容多種業界流行微服務框架,開發者亦可根據自身業務需求定製業務外掛。

同時,與ServiecComb同源的華為微服務引擎也將在11月中上旬獨立上線公測。

ServiecComb

上圖是ServiceComb的架構圖,ServiceComb執行時包含了兩部分核心模組。一部分是服務契約,這是基於Open API實現的針對Restful服務的標準描述資訊,這些資訊是獨立與具體語言的。服務契約是ServiceComb很重要的一個核心特點。

還有一塊是在執行時通過外掛方式提供的多種服務擴充套件能力,比如服務發現、熔斷、負載均衡、配置以及跟蹤等。由於為微服務是以獨立程序的方式存在,微服務框架首先需要保證服務間的網路呼叫問題,同時由於雲上這些網路呼叫是不可靠的,需要微服務框架通過容錯、負載均衡來保證服務之間呼叫的可靠性。在程式設計模型上ServiceComb支援同步、非同步、Reactive等程式設計模式。這裡的通訊模型主要負責訊息的序列化以及傳輸協議。

為什麼需要服務契約

作為服務消費者:

需要明確知道如何呼叫服務?

需要知道服務呼叫引數有哪些?

需要知道傳輸的內容是什麼?

作為服務提供方:

提供詳細描述的文件很難?

提供和維護標準的SDK也很難?

提供使用者支援也不太方便。

服務契約可以看作生產者和消費者雙方進行交易或溝通的合同。通過服務契約能夠保證服務消費者和服務提供方能夠按照相互約定好的方式來進行互動。這樣帶來最大的好處就是程式碼和文件可以一致化,同時這些契約可以對每個服務都做一個比較明確的能力限定,可以更好地幫助我們來協調和管理服務之間的呼叫。

服務契約定義

ServiceCombJava SDK同時支援API First & Code First兩種開發模式,使用者可以根據自己的需要靈活選擇。

面向介面契約而不是邏輯,通過工具可以根據契約生成相關的樁程式碼或者服務呼叫程式;

通過服務契約可以明確服務呼叫的引數已經相關的服務,這樣服務消費者不用等服務提供者開發完畢才能進行相關的開發,極大提升應用開發的效率;

契約定義為語言中立,可以通過相關的工具生成不同語言的服務樁程式碼或者是呼叫程式碼;

藉助相關介面工具,可以根據服務介面程式碼自動生成API描述文件,讓實現程式碼與文件的同步;

程式碼

ServiceCombJava SDK通過直接分析服務介面的Class檔案,直接從程式碼層面獲取Restful介面描述資訊,生產成契約描述資訊。目前ServiceComb Java SDK支援Spring MVC 以及JAXRS 等Restful服務定義方式。

通過非同步事件操作保證系統性能

系統性能

整個框架以事件驅動為基礎,用Event-Loop這種方式進行處理,這樣帶來最大的好處就是不會有太多的執行緒切換。通過非同步操作可以極大提升應用處理效率。目前為ServiceCombJavaSDK事件處理框架不但支援Restful協議而且還支援RPC協議。

分散式呼叫追蹤

ServiceComb Java SDK支援基於Zipkin的標準追蹤協議,同時也支援@span來擴充套件事務的追蹤能力。

在具體實現的過程中我們也提供了呼叫鏈,基於這種呼叫鏈大家可以很方便地查詢自己定義的處理器,對接自己所需的協議,然後進行對應的一些追蹤。

ServiceComb程式碼庫資訊

Java-chassis:Java版的微服務框架;

service-center:基於go語言的服務中心;

ServiceComb-Saga:長時間執行事務處理框架。

ServiceComb元件的新特性

Service-Center0.2.0:

提供了管理控制檯,對註冊的服務例項提供管理功能。

Java-Chassis0.3.0:

支援通過@Span註釋的方式定義事務;統一了Http請求處理,支援對Rest呼叫進行定製處理。

Saga0.1.0:

提供了初步的Saga呼叫服務,支援順序以及併發的呼叫處理。

社群貢獻

通過社群反饋能夠及時獲取到使用者的需求並在社群快速透明地改進。所以希望大家踴躍參與到社群。

ServiceComb專案完全融入開源,從誕生之日起就堅持開放、標準和生態三大理念。ServiceComb採用開源的方式和社群協作、使用者可以就任何的角色參與到社群開發,無論是Developer、Writer、Tester還是User,都是非常歡迎的。目前社群的工作承載在github(https://github.com/ServiceComb)、官網(https://www.servicecomb.io)和JIRA(https://servicecomb.atlassian.net)上,開發者和使用者可以再上面查閱到專案的所有資訊。ServiceComb 期待社群人員的參與,使用者可以將使用過程中發現的問題提到issue列表或JIRA上或者發起討論,也可以認領issue進行貢獻PR,任何的方式都是非常受歡迎的。

開發者可通過http://servicecomb.io/cn/developers/ 閱讀開發者指南。

原文來自微信公眾號:IT大咖說