微服務進階之路 容器落地避坑指南

2023-03-06 14:33:36 來源:飛象網
        【每日科技網】

  編者按:容器和容器編排系統僅僅是部署和運行的基礎平台,開發人員需要關注更多的是部署在平台上的應用。容器時代,應用架構發生了巨大變化,如果要讓應用在容器平台上發揮其的功效,我們就必須走上微服務道路。然而,容器落地的過程中路多坑更多,微服務進階之路需要更多經驗之談。

  微服務架構相對于單體架構有很大的變化,也産生了一些新的設計模式,比如 sidecar,如何開發一個微服務應用是一件有很大挑戰性的事情,我們經常會聽到有人讨論如何劃分微服務,多細的顆粒度才是微服務等問題。初學者經常會處于一個“忐忑不安”的狀态,所以我們急需要知道如何才能走上正确的微服務道路,或者需要一些實踐指導我們如何設計、開發一個微服務應用。

  不驕不躁不跟風 知己知彼方可百戰不殆

  雖然現在已經進入到一個不談微服務就落伍的時代,但作為 IT 從業者,我們一定要站在切身利益出發,多思考幾個“為什麼”,不要急于跟風。原因很簡單,不管外面如何風吹雨打,隻要你的房子足夠結實、安全、舒服,那一般情況下就不需要拆除重建,所以在決定繼續沿用單體架構還是轉向微服務架構之前,我們一定要做兩件事情:

  第一件事,從外部了解兩種架構各自的優劣:

  可以看到,單體應用并不是一無是處。

  第二件事,審視我們自己的業務:

  上述單體架構列出的一些問題是否已經嚴重影響了我們的業務?

  企業新的業務系統是否要滿足快速疊代、彈性等需求?

  團隊内是否有 DevOps 氛圍?

  企業内是否有足夠的動力和技術儲備去接觸新的技術?

  了解了單體應用和微服務應用的優劣特點,分析了企業自身的業務訴求和實際情況,最終還是決定轉型微服務架構,那麼我們也要清楚這不是一朝一夕的事情,需要分階段逐步推進。

  蒙眼狂奔不可取 循序漸進方可順利進階

  第一階段試煉—— 開發新應用

  對于初次接觸微服務的企業,選擇新應用入手是正确的方式。

  第一步可以選擇 web-scale、無狀态類型的新應用上手,比如基于 nginx 的網站、文檔等,這類應用非常簡單且容易實現,而且能體驗到微服務在容器平台上的各種功能。有了一定的經驗之後,第二步就可以開發有狀态類型的新應用,有狀态服務的挑戰就是數據管理。敲重點,跟以往單體應用的共享數據庫不同,微服務應用中的每一個服務“獨享”自己的數據庫,服務之間需要通過 API、事件或消息傳遞的方式來相互訪問對方的數據,而不是通過直接訪問對方數據庫的方式。

  換句話說,理想中的微服務是封裝自己的數據,通過API暴露數據出去,從而避免數據耦合,這樣每個微服務的數據格式發生變化也不影響其它微服務的數據調用。開發過和升級過大型企業單體應用的人對此會深有體會,一旦有人改變了數據庫 schema,整個應用都有可能啟動不起來,團隊開發效率會大大降低。

  微服務架構并不盡善盡美,适合自己的方案才是王道。

  不難理解,微服務數據是犧牲強一緻性而通過最終一緻性的方式來管理,這對數據的劃分帶來很大難度,比如不能再用 join 的方式訪問不同服務之間的數據表,實際當中也比較難做到或者做起來很麻煩,現在也沒有成熟且好用的庫或框架提供微服務的數據管理,而且某些應用确實需要強一緻性。而此時,我們不能通盤否定此類應用微服務化的可行性,應該适當折中或“妥協”,采用 miniservice。

  Miniservice 在開發與部署的獨立性和敏捷性方面類似于微服務(microservice),但沒有微服務那麼強的約束。通常情況下,一個 miniservcie 可以提供多個功能,這些功能之間可以共享數據庫。這個時候千萬不要害怕混合架構,不要害怕自己的微服務應用是否“正統”,“think big,start small,move fast“才是我們應該遵循的哲學。因此,一個企業應用裡既有 microservice 也有 miniservice,甚至有單體部分(可以稱之為 macroservice)都是可以接受的。

  以一個電商平台舉例,在整個場景裡面,業務開發人員面對的主要壓力來自前端頻繁的變動,因為要應對頻繁的促銷、推廣、降價等活動,所以面對消費者最前端的業務需要快速疊代。消費者會不停的浏覽商品,最終産生交易的請求數量要遠低于獲取商品信息的請求數量,因此将前端業務無狀态化,進行微服務拆分、解耦,便可以快速應對市場變化,靈活做出改變。

  那是不是把整個平台都做到微服務級别會變得更好?答案是“不确定”,因為當微服務量級到達一定程度,由此産生的管理和運維壓力是指數級增長的。而實際上,對于有些業務來講也沒有必要微服務化,比如很多電商平台都有 2B 的業務,其業務變化的頻度和壓力沒有 2C 那麼大,那以 macroservices 或者 miniservices 的方式去交付也是可以的。開發人員應該分析在整個應用架構體系中,哪些适合微服務化,哪些亟需微服務化。

  實踐出真知

  在上面的電商案例中,我們提到了服務無狀态化,之所以期望服務無狀态化,是因為無狀态應用可以做到快速的擴縮容,可以應對井噴流量,可以效率的利用計算資源。我們經常聽到,以無狀态為榮,以有狀态為恥,說的就是對于一個服務要盡量無狀态化它,比如用戶 session 管理,以前我們在業務邏輯模塊進行管理,導緻這些模塊不能按照無狀态方式任意伸縮。我們可以把這些 session 的管理抽取出來放到一個高可用或分布式的緩存中管理,業務模塊通過調用API的方式去獲取 session,這樣就實現了這些模塊的無狀态化。

  但這并不意味着所有服務都做到無狀态才是的,開發者要細細思考自己的業務模型并進行服務拆分,不要為了無狀态而無狀态,因為總是會存在有狀态服務的。

  第二階段進階—— 改造遺留應用

  如果我們經過認真思考後仍決定對遺留應用進行微服務化,比如需要新增功能、快速疊代現有功能等,那麼遵循一些實踐經驗。顯然,另起爐竈開發一套新的系統不太現實,失敗的概率非常高。

  第一點注意:新增功能點不能再在原有單體應用基礎上開發,而是需要按照微服務方式開發,但由于這個微服務是隸屬于原來單體應用的一部分功能,所以通常情況需要訪問單體應用的數據,這個時候需要通過API的方式訪問,以防止二者之間發生緊耦合。對于單體部分來說,無論是采用 Facade,還是 Adapter 或 Translator 模式提供 API,都是為新增的微服務模塊提供松耦合的訪問方式。

  第二點注意:對于已有的單體部分也可以逐步微服務化,可選擇經常變化、需要快速疊代滿足用戶需求的部分着手進行改造。經過幾輪改造後要麼整體替換掉原單體應用,要麼剩下的是穩定不變的單體部分,周圍就都是改造過的微服務混合架構了。

  第三階段收放自如——Service Mesh

  Service mesh 是微服務架構的一部分,它本質上是一個分布式計算中間件,通過攔截流量和安置策略來管理和優化服務之間的通信,使得服務變得更加健壯和安全。通常會提供微服務之間認證、鑒權、加密、服務發現、請求路由、負載均衡、服務自愈等功能。

  部署微服務應用,service mesh 是必不可少的部分。這是因為微服務應用是一個分布式的應用,因此相對于單體應用來說在穩定性、可管理性等方面都有很大難度,需要有 service mesh來管理幫助服務變得更加健壯和安全。

  因此,Service mesh 選型也是比較重要的,經常聽到有人糾結是選擇 Istio 還是 Spring Cloud 等。我們認為 Istio 是 service mesh 的發展方向,從架構來說,它解耦了控制平面和數據平面,使得開發者可以專注于應用業務邏輯的開發,而複雜的分布式應用服務之間的通信交給 service mesh 來控制。Spring Cloud 在架構設計理念上是落後的,試想一下,開發者在開發微服務的時候還要思考如何在代碼中實現熔斷、灰度發布、負載均衡等問題,負擔是非常重的。更重要的是 Spring Cloud 類型的 service mesh 隻支持 Java 語言,完全違背微服務可以任選語言開發的主張,而且有 vendor lock-in 嫌疑。

  Istio 身上鮮明的标簽很多:天然适合 Kubernetes 平台,不侵入代碼,無語言綁定,但不得不承認,Istio 還在發展過程當中,目前也有一些問題亟待解決:

  性能依然不夠理想。基于 Istio 實現的微服務,由于虛拟化、轉發等因素造成的性能損耗依然過大,不過積極的方面是我們看到一方面這是社區持續改進的重點,另一方面我們看到大家在做一些有效的嘗試,比如通過 cilium 做 service mesh 的 proxy,提升性能;

  門檻高。Istio 雖然控制面做的很,但上手成本依然很高,很多企業用戶還處在容器化改造階段,以一種複雜面貌去呈現是很難很快融入企業 IT 架構中的;

  落地實踐少。雖然社區火熱,被談論的熱度很高,但企業用戶或者在觀望,或者在嘗試,我們能看到的是有技術實力的互聯網公司将 Istio 中的某個組件拆解出來,或改造、或接入他們現有微服務治理平台,但這又會造成一種和社區主分支不一緻的問題,為将來能否和社區保持一緻帶來些許擔心,是否會走上廠商綁定的老路還需要觀察。值得一提的是,在2018年上海 KubeCon 大會上,Google 的開發者講述了在美國三家公司成功将 Istio 用于生産的案例,相信類似的事情會發生的越來越多,也期待今年上海的 KubeCon 能看到更多來自 Istio 的分享。

  雖然 Istio 存在上述問題,但我們更應看到其社區正在飛速增長,就好比一兩年前 k8s、docker swarm 和 Mesos 之争一樣,那個時候 k8s 強大的生态活躍度為它最終勝利打下了良好的基礎,我們認為 Istio 就是在 service mesh 領域的 k8s,未來很有可能會赢得這個領域的主導地位。當一個應用的微服務越來越多的時候,service mesh 變得非常重要,而且目光看得更遠一些,随着 FaaS 步入業務開發者的視野,大家越來越享受這種便捷、靈活的開發方式,這意味着以服務視角的開發模式會越來越流行,因此 service mesh 框架會變得越來越重要。

  綜上所述,通過 Istio 構建微服務治理屏幕,學習曲線起點比較高,運維也非常麻煩,運維人員關注的是功能的輸出,比如熔斷、限流、灰度發布等,但 Istio 要求他們先要部署組件,編輯 yaml,了解各種抽象的參數,這就好比在看 3D 電影前,讓觀衆自己先要組裝 3D 眼鏡一樣。因此,微服務進階之路道阻且長,企業需要一個平台級商業産品,可以從業務視角來管理微服務的可視化工具或者平台,降低用戶的學習和運維成本,提高用戶的業務價值輸出能力,幫助用戶重塑數字化時代核心競争力。

  “大道至簡 舉重若輕”誠邀您參加将于4月19日在北京北辰洲際酒店舉辦的KubeSphere 容器平台發布會,輕量級調度全棧雲功能,助力企業快速步入雲原生之旅,帶你在數字化轉型中一步!

免責聲明:本文僅代表作者個人觀點,與每日科技網無關。其原創性以及文中陳述文字和内容未經本站證實,對本文以及其中全部或者部分内容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關内容。
    本網站有部分内容均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責,若因作品内容、知識産權、版權和其他問題,請及時提供相關證明等材料并與我們聯系,本網站将在規定時間内給予删除等相關處理.

猜你喜歡

海能達發布全新專業防爆PDT對講機CH690Ex

随着我國應急管理體系持續完善,消防救援任務正在從傳統火災處置,向化工園區事故、危險品洩漏、地下空間救援、大型綜合災害等多風險、多場景方向發展。在這些複雜環境中,救援現場往往面臨爆炸性氣體、可燃性粉塵、

2周前

海能達CCW 2026載譽收官:AI與融合通信引領專用通信新未來

6月16日至18日,2026年全球關鍵通信展(CCW2026)在英國倫敦舉行。展會期間,海能達集中展示了從終端到系統、從感知到決策的全鍊路創新版圖,AI與融合通信産品及解決方案貫穿三天展期,持續獲得高

1個月前

登陸歐洲 Intersolar!遠景AI電力系統支撐全球 AI 算力發展

慕尼黑,2026年6月23日——在IntersolarEurope2026上,遠景科技集團發布面向AI數據中心的下一代電力基礎設施——融合風光儲一體化方案、固态變壓器(SST)、800V直流供電、儲能

1個月前

海能達六度問鼎ICCAs,PDC650與西安機場方案摘得雙獎

6月17日,2026年國際關鍵通信獎(InternationalCriticalCommunicationsAwards,ICCAs)在英國倫敦舉行的全球關鍵通信展(CCW2026)期間正式揭曉。海能

1個月前

海能達即将亮相2026年CCW全球關鍵通信展: 攜AI與融合通信解決方案登陸倫敦

6月16日至18日,2026年CCW全球關鍵通信展将在英國倫敦啟幕。作為全球領先的專用通信解決方案提供商,海能達将以全場景關鍵通信産品矩陣亮相F25展位,集中展示面向公共安全、應急救援、城市治理等領域

1個月前

海能達再獲第十一屆廣東專利獎:持續自主創新,構築專用通信知識産權高地

近日,廣東省市場監督管理局正式公示第十一屆廣東專利獎評選結果。海能達通信股份有限公司申報的“一種集群通信系統的組派接方法、通信系統及存儲介質”(專利号:ZL201811296617.7)榮獲廣東專利優

1個月前