0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

微服務(wù)五大關(guān)鍵好處揭秘

lhl545545 ? 來源:電子發(fā)燒友網(wǎng) ? 2018-02-09 08:39 ? 次閱讀

前言

在過去40 年里,軟件開發(fā)的世界日新月異,微服務(wù)日趨流行。本文為我們揭示了微服務(wù)的五大關(guān)鍵好處,看它們是如何幫助我們提升軟件質(zhì)量并適應(yīng)新的業(yè)務(wù)需求。

彈性

維基百科將彈性定義為系統(tǒng)處理變化的能力。我對彈性的理解是在問題被解決后系統(tǒng)從異常狀態(tài)(短暫的硬件故障以及意料之外的高網(wǎng)絡(luò)延遲等)或壓力期中優(yōu)雅恢復(fù),同時又不會影響系統(tǒng)性能的能力。

這雖然聽上去很簡單,但是在構(gòu)建面向微服務(wù)軟件的時候,問題源會由于系統(tǒng)的分布式特性而被放大,有時很難(甚至不可能)防止所有的異常情況。

彈性是從錯誤中優(yōu)雅恢復(fù)的能力。但它同樣也為系統(tǒng)帶來了新的復(fù)雜度:如果一個微服務(wù)出現(xiàn)了問題,我們能否防止系統(tǒng)的常規(guī)故障?理想情況下,我們應(yīng)該以這樣一種方式來構(gòu)建服務(wù):僅對服務(wù)響應(yīng)進行降級而非讓系統(tǒng)出現(xiàn)常規(guī)故障,即使這樣做也并不容易。

可伸縮性

如今,各大公司的一個通病是系統(tǒng)存在可伸縮性問題。如果你之前曾與某個單塊軟件打過交道,我確信你在伴隨公司的成長過程中,必定會在某些時刻遭遇到容量問題。

通常,這些問題并不涉及應(yīng)用的每一層次或所有子系統(tǒng)。往往只有個別子系統(tǒng)或服務(wù)會明顯慢于其余部分,一旦沒有處理好容量問題就會導(dǎo)致整個應(yīng)用發(fā)生故障。下圖描述了我們是如何對微服務(wù)進行擴展(擴展成兩個郵件服務(wù))的,同時又不牽扯系統(tǒng)的其余部分:

微服務(wù)五大關(guān)鍵好處揭秘

讓我們來看一個關(guān)于車險的場景,用于計算指定風(fēng)險因素列表報價的服務(wù)便是該類問題的一個例子。通過擴展整個應(yīng)用來滿足對某個特定部分的需求是否有意義?如果你腦海中的答案是“否”,那么你離擁抱微服務(wù)更近了一步。微服務(wù)可以讓你僅僅按需擴展系統(tǒng)的一部分,從而只加大系統(tǒng)特定部分的處理能力。讓我們來看一個關(guān)于車險的場景,用于計算指定風(fēng)險因素列表報價的服務(wù)便是該類問題的一個例子。通過擴展整個應(yīng)用來滿足對某個特定部分的需求是否有意義?如果你腦海中的答案是“否”,那么你離擁抱微服務(wù)更近了一步。微服務(wù)可以讓你僅僅按需擴展系統(tǒng)的一部分,從而只加大系統(tǒng)特定部分的處理能力。

如果該保險系統(tǒng)是一個面向微服務(wù)的系統(tǒng),那么我們只需要創(chuàng)建更多的微服務(wù)實例來負責(zé)計算就能解決報價計算需求過旺的問題。請記住,擴展服務(wù)會給運維團隊增加開銷。

技術(shù)多樣性

軟件的世界每幾個月就會更新?lián)Q代。新語言進入業(yè)界成為某類系統(tǒng)事實標準的節(jié)奏片刻未停。幾年前, Ruby onRails面世并在 2013年成為在各種新項目中使用昀多的 Web框架。Golang(由 Google創(chuàng)建的一門語言)因其結(jié)合了強大的性能與優(yōu)雅簡潔的語法而成為當(dāng)前的一種趨勢,任何只要擁有一門編程語言經(jīng)驗的人都可以在幾天內(nèi)學(xué)會它。

在過去,我也曾使用 PythonJava成功編寫過微服務(wù)。

尤其是 Java,自從 Spring Boot發(fā)布之后,它成為在編寫敏捷微服務(wù)方面相當(dāng)有吸引力的技術(shù)棧。

Django是一款強大且可用于編寫微服務(wù)的 Python框架,與 Ruby on Rails非常相似。通過它我們可以自動化地進行數(shù)據(jù)庫遷移,并可以非常輕松地完成創(chuàng)建 CRUD(創(chuàng)建、讀取、更新及刪除)服務(wù)的工作。

Node.js利用了著名語言 JavaScript的優(yōu)勢,創(chuàng)建了一個新的服務(wù)端技術(shù)棧,從而改變了工程師們編寫新軟件的方式。

那么,將這些技術(shù)都結(jié)合起來會有什么問題嗎?平心而論,這是一個優(yōu)勢:我們可以選擇合適的工具來做相對應(yīng)的工作。

只要待集成的技術(shù)是標準化的,面向微服務(wù)的架構(gòu)便可以幫你實現(xiàn)這一點。正如我們在上文中已經(jīng)了解到的,一個微服務(wù)是非常小的,并且是一個自主運維的軟件中的獨立部分。

下圖展示了微服務(wù)是如何隱藏數(shù)據(jù)的存取邏輯的,兩個服務(wù)在存取數(shù)據(jù)方面共用同一個通信點,從而能很好地互相解耦(一個服務(wù)實現(xiàn)發(fā)生變化時并不涉及任何其他服務(wù)):

微服務(wù)五大關(guān)鍵好處揭秘

此前我們曾討論到性能的問題。通常,系統(tǒng)的某些部分會比其他部分承受更多的壓力。通過利用當(dāng)代的多核 CPU進行并行(并發(fā))編程可以解決其中的一些性能問題。然而, Node.js并不是一門適合執(zhí)行并行任務(wù)的語言。針對那些處于壓力之下的微服務(wù)來說,我們可以選擇一門更加適合的語言來進行開發(fā),比如 Erlang,從而可以以一種更加優(yōu)雅的方式來管理并發(fā)。這樣做,花不了你兩周的時間。

在同一系統(tǒng)中使用多種技術(shù)存在著一個問題:開發(fā)人員和系統(tǒng)管理員需要知道所有的(或一部分)相關(guān)技能。擁抱微服務(wù)的公司通??梢员忠婚T核心技術(shù)(在本書中,我們將會使用 Node.js),并輔以一些其他技術(shù)(我們除了使用 Docker來管理部署之外,還可以采用 Capistrano或 Fabricator來管理發(fā)布)。

可替換性

可替換性是指替換系統(tǒng)中某個組件而不影響系統(tǒng)行為的一種能力。當(dāng)我們在討論軟件的時候,可替換性往往是與低耦合密不可分的。在編寫微服務(wù)的時候不能將內(nèi)部邏輯暴露給調(diào)用服務(wù),服務(wù)實現(xiàn)對客戶端來說是透明的,客戶端了解的只有接口。讓我們來看看下面的例子,該接口是用 Java編寫的,僅需通過觀察接口就能識別出它存在著什么問題。

public interface GeoIpService {

/**

*檢查IP是否屬于指定ISO代碼所對應(yīng)的國家

**/

boolean isIn(String ip, String isoCode) throws

SOAPFaultException;

}

初看該接口可以發(fā)現(xiàn)它是自描述的。它將檢查特定 IP是否屬于特定的國家,一旦服務(wù)出現(xiàn)重大問題會拋出 SOAPFaultException。

如果我們構(gòu)建客戶端來消費該接口,需要考慮到服務(wù)的上述邏輯,捕獲并處理 SoapFaultException。這等同于將服務(wù)內(nèi)部實現(xiàn)的細節(jié)暴露給了外部世界,從而很難再替換掉 GeoIpService接口。同樣的,事實上我們創(chuàng)建的某個服務(wù)如果關(guān)聯(lián)了應(yīng)用邏輯的某個部分則表明創(chuàng)建了一個限界上下文:即一個高內(nèi)聚的服務(wù)或服務(wù)集(通過集合所轄服務(wù)的協(xié)同工作可以達成一個目標)。

獨立性

不管我們怎么努力,人類的大腦都不擅長解決復(fù)雜問題。人類大腦昀有效的運作模式是同一時間只做一件事情,所以我們可以將復(fù)雜問題拆解成更小的問題。面向微服務(wù)的架構(gòu)應(yīng)該也遵從這一方式:所有服務(wù)應(yīng)該都是獨立的,它們通過接口進行交互。除了協(xié)定確認接口這一環(huán)節(jié)之外,不同的工程師團隊可以在無須交流的情況下完成對服務(wù)的開發(fā)。一家采用了微服務(wù)的公司可以根據(jù)業(yè)務(wù)的需求來調(diào)整工程師團隊的規(guī)模,從而能敏捷地響應(yīng)業(yè)務(wù)的高峰期或靜默期。

為什么可替換性如此重要

在前面的一個小節(jié)中,我們討論了該如何確定微服務(wù)的合理規(guī)模。按照普遍的經(jīng)驗而言,一個團隊應(yīng)該能在一個 sprint內(nèi)完成一個微服務(wù)的重寫和部署。這樣做的背后的根本原因就是技術(shù)債務(wù)。

我會將技術(shù)債務(wù)定義為在一個既定計劃的周期內(nèi),初始技術(shù)設(shè)計與預(yù)期交付功能之間的偏差。某些方面的犧牲或錯誤假設(shè)會導(dǎo)致編寫的軟件非常糟糕,這樣的軟件需要全盤重構(gòu)或重寫。在前面的例子中,接口在暴露給外部世界時明確表明必須使用 SOAP來調(diào)用 Web服務(wù)。一旦需要將客戶端代碼改造成 REST客戶端,REST客戶端根本無法處理 SOAP異常。

易于部署

微服務(wù)應(yīng)當(dāng)易于部署。作為軟件開發(fā)者,我們知道在軟件的部署過程中很多事情都可能會出現(xiàn)問題。正如前面所提到的,微服務(wù)是非常易于部署的,原因如下:

?少量的業(yè)務(wù)邏輯(從經(jīng)驗上來說是只需兩周即可完成從無到有的編寫)導(dǎo)致更易于部署。

?微服務(wù)是自治的工作單元,所以升級一個服務(wù)對于復(fù)雜系統(tǒng)來說是一個局部可控的問題。無須重新部署整個系統(tǒng)。

?微服務(wù)架構(gòu)中的基礎(chǔ)設(shè)施和配置應(yīng)該盡可能自動化。在本書的后續(xù)部分中,我們將學(xué)習(xí)如何使用 Docker來部署微服務(wù),以及這樣做相比于傳統(tǒng)部署技術(shù)會有怎樣的優(yōu)勢。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    126

    瀏覽量

    7303
收藏 人收藏

    評論

    相關(guān)推薦

    揭秘高質(zhì)量點焊機的五大標準:打造焊接性能的基石

    ,究竟什么樣的點焊機才能稱之為高質(zhì)量呢?現(xiàn)在,就讓我們一同揭秘高質(zhì)量點焊機的五大標準,帶您領(lǐng)略其背后的技術(shù)魅力與工藝精髓。
    的頭像 發(fā)表于 09-12 15:26 ?126次閱讀
    <b class='flag-5'>揭秘</b>高質(zhì)量點焊機的<b class='flag-5'>五大</b>標準:打造焊接性能的基石

    NVIDIA NIM微服務(wù)帶來巨大優(yōu)勢

    服務(wù)通過熱門 AI 模型為數(shù)百萬開發(fā)者帶來高達 5 倍的 token 效率提升,使他們能夠立即訪問在 NVIDIA DGX Cloud 上運行的 NIM 微服務(wù)。
    的頭像 發(fā)表于 08-23 15:20 ?326次閱讀

    采用OpenUSD和NVIDIA NIM微服務(wù)創(chuàng)建精準品牌視覺

    全球領(lǐng)先的創(chuàng)意和制作服務(wù)機構(gòu)率先采用 OpenUSD 和 NVIDIA NIM 微服務(wù)來創(chuàng)建精準的品牌視覺。
    的頭像 發(fā)表于 08-01 14:33 ?322次閱讀

    工業(yè)PLC控制柜保養(yǎng)的五大關(guān)鍵步驟

    工業(yè)PLC控制柜保養(yǎng)的五大關(guān)鍵步驟 ?控制柜廠家找上海尤勁恩 隨著工業(yè)自動化技術(shù)的不斷發(fā)展,PLC控制柜在生產(chǎn)線上的地位日益重要。尤勁恩(上海)信息科技有限公司作為專業(yè)的自動化控制設(shè)備供應(yīng)商,其
    的頭像 發(fā)表于 04-22 15:00 ?286次閱讀

    MOS管發(fā)熱的五大關(guān)鍵技術(shù)

    MOS管作為一種常見的功率器件,在電子設(shè)備中起著重要作用。其中,MOS管發(fā)熱問題是設(shè)計過程中需要重點考慮的技術(shù)難題之一。下面將從以下關(guān)鍵技術(shù)方面對MOS管發(fā)熱問題進行淺析: 1. 導(dǎo)熱
    的頭像 發(fā)表于 03-19 13:28 ?453次閱讀

    【算能RADXA微服務(wù)器試用體驗】Radxa Fogwise 1684X Mini 規(guī)格

    通過網(wǎng)絡(luò)可以了解到,算能RADXA微服務(wù)器的具體規(guī)格: 處理器:BM1684X 算力:高達32Tops INT8峰值算力 內(nèi)存:16GB LPDDR4X 內(nèi)存 存儲:64GB eMMC 編程框架
    發(fā)表于 02-28 11:21

    Java微服務(wù)隨機掉線排查過程簡析

    我們的業(yè)務(wù)共使用 11 臺(阿里云)服務(wù)器,使用 SpringcloudAlibaba 構(gòu)建微服務(wù)集群, 共計 60 個微服務(wù), 全部注冊在同一個 Nacos 集群。
    的頭像 發(fā)表于 01-13 17:41 ?805次閱讀
    Java<b class='flag-5'>微服務(wù)</b>隨機掉線排查過程簡析

    電機的五大啟動方式

    自動化小白必學(xué)!電機的五大啟動方式
    的頭像 發(fā)表于 01-09 10:39 ?748次閱讀
    電機的<b class='flag-5'>五大</b>啟動方式

    游戲公司不使用微服務(wù)架構(gòu)的原因

    微服務(wù)基本只有 request/response 的模式。做不了 streaming?微服務(wù)通常要求應(yīng)用是無狀態(tài)的才能做到水平擴展。streaming 本身就是加入了狀態(tài)
    的頭像 發(fā)表于 12-29 11:18 ?354次閱讀

    如何構(gòu)建彈性、高可用的微服務(wù)

    基于微服務(wù)的應(yīng)用程序可實現(xiàn)戰(zhàn)略性數(shù)字轉(zhuǎn)型和云遷移計劃,對于開發(fā)團隊來說,這種架構(gòu)十分重要。那么,如何來構(gòu)建彈性、高可用的微服務(wù)呢?RedisEnterprise給出了一個完美的方案。文況速覽
    的頭像 發(fā)表于 11-26 08:06 ?381次閱讀
    如何構(gòu)建彈性、高可用的<b class='flag-5'>微服務(wù)</b>?

    設(shè)計微服務(wù)架構(gòu)的原則

    微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴展性。你可能會想,我的團隊需不需要采用微服務(wù),設(shè)計微服務(wù)架構(gòu)有哪些原則?本文會給你一些靈感。文章速覽:微服務(wù)設(shè)計的要素
    的頭像 發(fā)表于 11-26 08:05 ?453次閱讀
    設(shè)計<b class='flag-5'>微服務(wù)</b>架構(gòu)的原則

    docker微服務(wù)架構(gòu)實戰(zhàn)

    隨著云計算和容器化技術(shù)的快速發(fā)展,微服務(wù)架構(gòu)在軟件開發(fā)領(lǐng)域中變得越來越流行。微服務(wù)架構(gòu)將一個大型的軟件應(yīng)用拆分成多個小型的、獨立部署的服務(wù),每個服務(wù)負責(zé)獨立的業(yè)務(wù)功能。其中,Docke
    的頭像 發(fā)表于 11-23 09:26 ?515次閱讀

    springcloud微服務(wù)架構(gòu)

    Spring Cloud是一個開源的微服務(wù)架構(gòu)框架,它提供了一系列工具和組件,用于構(gòu)建和管理分布式系統(tǒng)中的微服務(wù)。它基于Spring框架,旨在通過簡化開發(fā)過程和降低系統(tǒng)復(fù)雜性來幫助開發(fā)人員構(gòu)建彈性
    的頭像 發(fā)表于 11-23 09:24 ?933次閱讀

    springcloud五大組件

    Spring Cloud是一個基于Spring Boot的開發(fā)工具包,可用于快速構(gòu)建微服務(wù)架構(gòu)的應(yīng)用程序。它將常見的微服務(wù)架構(gòu)模式抽象為個核心組件:服務(wù)發(fā)現(xiàn)、
    的頭像 發(fā)表于 11-16 11:04 ?934次閱讀

    Spring Cloud :打造可擴展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是一個基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的微服務(wù)網(wǎng)關(guān)。它提供了豐富的功能,包括動態(tài)路由、請求限流、集成安全性等,使其成為構(gòu)建微服務(wù)架構(gòu)的理想選擇。
    的頭像 發(fā)表于 10-22 10:03 ?427次閱讀
    Spring Cloud :打造可擴展的<b class='flag-5'>微服務(wù)</b>網(wǎng)關(guān)