1. 程式人生 > >java架構之路-(微服務專題)初步認識微服務與nacos初步搭建

java架構之路-(微服務專題)初步認識微服務與nacos初步搭建

歷史演變:

  以前我們都是一個war包,包含了很多很多的程式碼,反正我開始工作的時候做的就是這樣的專案,一個金融系統,程式碼具體多少行記不清楚了,內部功能超多,但是實際能用到的不多,程式碼冗餘超大,每次部署大概要10分鐘以上。

  這個war包包含了我們的所有,jsp、js、css、java程式碼。程式碼很臃腫,每次改BUG很容易“碰瓷”。還有很多很多的不方面,這裡就不一一列舉了。畫個圖~!

     慢慢的我們的使用者越來越多了,一臺伺服器扛不住了,我們於是乎有橫向擴充套件,有了nginx,貌似可以解決我們的一些問題了。

  

  但是...假如我們現在要一個寶淘商城,內部包含內部訂單模組,積分模組,支付模組,使用者模組等等,都擠在一個war包,假如訂單模組需要電腦的磁碟IO,支付模組需要我們的CPU計算,這樣我們的伺服器一定是既有一個好的CPU又有一個好的磁碟,也會造成我們的伺服器成本很高。

  貌似這樣可以解決了問題,但是還不是最優質的,這時來了一個大佬,馬丁福勒,就是這個人。他第一次提出了微服務的思想。我們來簡單拆分一下。

   及時使用者量大增,我們覺得我們的訂單服務有壓力了,我們只需要增加我們的訂單服務的伺服器就可以了。

   我們來明確幾個定義,什麼是微服務?什麼又是微服務架構?

   微服務:微服務核心就是把傳統的單機應用,根據業務將單機應用拆分為一個一個的服務,徹底的解耦,每一個服務都是提供特定的功能,一個服務只做一件事,類似程序, 每個服務都能夠單獨部署,甚至可以擁有自己的資料庫。這樣的一個一個的小服務就是 微服務。這個是摘自馬丁福勒的文章。比如我們的訂單服務,可以成為一個微服務,我們的積分服務,也可以成為一個微服務。

   微服務架構:微服務架構是指把 一個一個的微服務組合管理起來,對外提供一套完整的服務。 

對比優缺點:

  我們現在有了微服務架構,難道我們所有的專案都可以調整為微服務架構嗎?我們來看看傳統架構和微服務架構的優缺點。

  傳統架構優點:

  ①.就一個war包,運維超級幸福。

  ②.架構簡單明瞭,沒有那些分散式事務,分散式鎖等等問題。

  傳統架構缺點:

  ①.程式碼臃腫,每個程式設計師需要了解所有模組的程式碼。

  ②.程式碼質量參差不齊,每次改BUG容易碰瓷。

  ③.不便於做擴充套件,架構限制性強,擴充套件成本高。

  ④.部署難,程式碼行過多,部署半小時很正常。

  ⑤.如果一個非核心模組出現問題,會造成整體系統不可用,比如積分模組記憶體溢位,倒置整個系統宕機。

  看起來傳統架構缺點還是不少的,但是也不是每個專案都適合微服務架構的,比如一個小OA系統,本來功能就不多,你沒有必要去拆分服務了,對吧~!我們再來看看微服務給我們帶來了什麼優缺點吧。

  微服務的優點:

  ①.程式設計師不需要了解整體業務,只需專心研究自己關注的業務即可。

  ②.改BUG時不用提心吊膽,頂多影響自己的服務不可用,不會導致整體不可用。

  ③.便於後期的擴充套件,也可以隨時應對需求的變化。

  微服務的缺點:

  ①.部署困難,對於運維人員有一些壓力(k8s+docker+jenkis )

  ②.服務之間的通訊增加了通訊成本。

  ③.帶來了分散式事務,分散式鎖,分散式JOB等等問題等待我們來解決。

   微服務的適用場景:合適,大型複雜的專案(來自單體架構200W行程式碼的恐懼) ,適合快速迭代的專案(來自一天一版的恐懼) ,適合併發高的專案(考慮彈性伸縮擴容的恐懼) ,但我們的微服務不合適那些業務穩定,就是修修bug ,改改資料的系統,迭代週期長,發版頻率一二個月一次的穩定系統。

微服務架構是一個架構風格, 提倡

  ①.將一個單一應用程式開發為一組小型服務。

  ②.每個服務執行在自己的程序中。

  ③.服務之間通過輕量級的通訊機制(http rest api)

  ④.每個服務都能夠獨立的部署

  ⑤.每個服務甚至可以擁有自己的資料庫 

搭建nacos:

  終於到了我們的程式碼環節,好討厭寫那些理論的定義。

  eureka很多人都知道,我們的nacos和eureka的功能差不多,就是eureka是springcloud netflix的nacos是springcloud alibaba的。

  nacos的官網是這樣說的:Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現代應用架構(例如微服務正規化、雲原生正規化)的服務基礎設施。

  我們儘快進入我們的程式碼環節吧。

  1.下載地址https://github.com/alibaba/Nacos/releases

  

   2.下載完成直接解壓即可。命令:tar -zxvf nacos-server-1.1.4.tar.gz

   3.切換到nacos目錄下的bin目錄,輸入./startup.sh -m standalone啟動即可。

   4.輸入lsof -i:8848,檢查我們的服務是否啟動成功。

   5.在位址列輸入http://你伺服器的IP:8848/nacos訪問即可。賬號nacos,密碼nacos,注意你自己的防火牆關閉,埠外部訪問開啟。

   單機的nacos就搭建完成了,我們來看看如何用springboot來配置nacos。

   nacos叢集配置

   ①.需要我們自己提前安裝一個nginx和mysql,我以前寫過怎麼安裝nginx和mysql的文章,大家不會配置的可以去看一下。

我的nginx配置檔案如下

 upstream nacos_cluster {
                server 192.168.138.110:8848;
                server 192.168.138.111:8848;
                server 192.168.138.112:8848;
        }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /nacos {
                        proxy_set_header Host $host;
                        proxy_pass http://nacos_cluster/nacos;
        }

   ②.修改nacos配置,切換到我們的nacos的conf目錄下,將cluster.conf.example檔案拷貝一份,重新命名為cluster.conf。將要叢集的IP和埠加入進去,例如

192.168.138.110:8848
192.168.138.111:8848
192.168.138.112:8848

   ③.修改application.properties配置檔案,加入mysql配置

spring.datasource.platform=mysql
# 資料庫例項數量
db.num=1
# 自己資料庫的連線資訊 
db.url.0=jdbc:mysql://192.168.138.119:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

  ④.初始化資料庫檔案,指令碼檔案在你的nacos的conf下,有一個nacos-mysql.sql檔案。

  ⑤.啟動,走起。分別訪問http://192.168.138.119/nacos(nginx地址)、http://192.168.138.110/nacos、http://192.168.138.111/nacos、http://192.168.138.112/nacos

總結:

   目前為止,我們應該對於微服務和微服務架構有一定了解了。這次我們主要說的我們的註冊中心nacos的搭建,和怎麼把服務註冊到我們的nacos中去,還有我們的nacos的叢集搭建,nacos還沒完事呢,後面我會出nacos的使用,和內部的一些概念,比如組,版本什麼的,到時候看看和ribbon一起說吧。下次部落格我們來說說我們的eureka配置吧。

 

最進弄了一個公眾號,小菜技術,歡迎大家的加入