歷史演變:
以前我們都是一個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配置吧。
最進弄了一個公眾號,小菜技術,歡迎大家的加入