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


歷史演變:

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

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

     慢慢的我們的用戶越來越多了,一台服務器扛不住了,我們於是乎有橫向擴展,有了nginx,貌似可以解決我們的一些問題了。

  

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

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

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

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

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

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

對比優缺點:

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

  傳統架構優點:

  ①.就一個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配置吧。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM