跟著《架構探險》學輕量級微服務架構 (一)

coding01發表於2019-02-20

架構探險
架構探險

微服務概念這兩年已經火遍大江南了,但在實際的開發和使用中,用到的還是挺少的,尤其對創業團隊來說。

在上一個產品中,我們也在把傳統的開發模式,不斷往「微服務」方向靠攏。但終究還是處於學習階段。最近偶然發現有人推薦《架構探險 輕量級微服務架構》上下冊這兩本書,簡單的看了看目錄後,覺得使用到的技術,有些已經在開發過程中用到過,有些可能會在未來的某一階段會使用到。

也本著「多看書,多學習」的原則,果斷入手了這兩本書。昨天到手後,用了一晚上的時間,粗略看完了第一本書,今天迫不及待的想按照書中的脈絡和技術棧,邊學習邊動手,搭建簡易的「輕量級微服務架構」。

預計分成好幾篇讀書摘要來分享讀書心得

微服務

微服務是一種分散式系統架構,它建議我們將業務劃分為更加細粒度的服務,並使每個服務的責任單一且可獨立部署,服務內部高內聚,隱含內部細節,服務之間低耦合,彼此相互隔離。此外,我們根據面向服務的業務領域來建模,對外提供統一的 API 介面。微服務的思想不只是停留在開發階段,它貫穿於設計、開發、測試、部署、運維等軟體生命週期階段。
引用於《架構探險》

優點

微服務滿足以下幾點要求:

· 根據業務模組劃分服務種類;
· 每個服務可獨立部署且相互隔離;
· 通過輕量級 API 呼叫服務;
· 服務需保證良好的高可用性。

引用於《架構探險》

當滿足於微服務架構,所帶來的好處無外乎以下幾點:

1. 每個微服務元件都是簡單靈活的,能夠獨立部署。不再像以前一樣,應用需要一個龐大的應用伺服器來支撐,而且前端、後臺、資料庫什麼的都整合在一起;

2. 每個微服務元件,都可以由更小的團隊,或者第三方平臺來負責開發,或者提供,讓所有人更專注專業,提供更高效可靠的服務。

3. 微服務之間是鬆耦合的,微服務內部是高內聚的,每個微服務都可以根據自身提供的服務進行有針對性的擴充套件。

4. 微服務架構與語言工具無關,自由選擇合適的語言和工具,尤其對於小團隊來說,如果其中一組 PHP 開發人員忙於其它業務開發,完全可以由另一組 Java 開發人員來開發。

微服務核心技術

這本書主要利用一些主流的開發框架和工具來搭建微服務架構:

1. 微服務開發框架 —— Spring Boot 框架
2. 微服務閘道器 —— Node.js
3. 微服務註冊與發現 —— ZooKeeper
4. 微服務封裝 —— Docker
5. 微服務部署 —— Jenkins, GitLab

寫程式碼

微服務開發框架 —— Spring Boot 框架

關於開發 IDE,我是推薦 jetbrains (www.jetbrains.com/) 家族系列的,如 Java 使用 IntelliJ IDEA,如 前端開發使用 WebStorm, PHP 開發使用 PhPStorm 等。

在使用 IntelliJ IDEA 之前,我們需要加入 Maven 國內映象來加塊外掛等的下載速度:

在 settings.xml 檔案中加入阿里雲映象路徑:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">

      <mirrors>
        <mirror>  
            <id>alimaven</id>  
            <name>aliyun maven</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
            <mirrorOf>central</mirrorOf>          
        </mirror>  
      </mirrors>
</settings>複製程式碼

在 IntelliJ IDEA 中如果沒有 Spring Boot 開發腳手架,可以直接搜尋外掛安裝:

初始化 Spring Boot 應用:

專案的整個目錄結構如下:

正如書上所說:

1. 在類中帶有 @SpringBootApplication,表明它是個 Spring Boot 應用;

2. 類中包含有 main()函式,通過 SpringApplication.run(Demo1Application.class, args);來執行該類。

3. 加入簡單的一個 Hello 介面,直接上程式碼:

package com.yemeishu.demo1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class Demo1Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
    }

    @RequestMapping(method = RequestMethod.GET, path = "/hello")
    public String hello () {
        return "你好 葉梅樹";
    }
}複製程式碼

現在可以直接點「執行」了,輸出一堆 Log:

在瀏覽器輸入網址:http://localhost:8080/hello,即可看到結果:

總結

可以看出 Spring Boot 還是比較容易上手的,接下來繼續學習 Spring Boot 和微服務相關的功能開發。


明天繼續,coding01 期待您繼續關注

qrcode
qrcode


也很感謝您能看到這了

qrcode
qrcode

相關文章