java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
歷史演變:
以前我們都是一個war包,包含了很多很多的代碼,反正我開始工作的時候做的就是這樣的項(xiàng)目,一個金融系統(tǒng),代碼具體多少行記不清楚了,內(nèi)部功能超多,但是實(shí)際能用到的不多,代碼冗余超大,每次部署大概要10分鐘以上。
這個war包包含了我們的所有,jsp、js、css、java代碼。代碼很臃腫,每次改BUG很容易“碰瓷”。還有很多很多的不方面,這里就不一一列舉了。畫個圖~!
慢慢的我們的用戶越來越多了,一臺服務(wù)器扛不住了,我們于是乎有橫向擴(kuò)展,有了nginx,貌似可以解決我們的一些問題了。
但是...假如我們現(xiàn)在要一個寶淘商城,內(nèi)部包含內(nèi)部訂單模塊,積分模塊,支付模塊,用戶模塊等等,都擠在一個war包,假如訂單模塊需要電腦的磁盤IO,支付模塊需要我們的CPU計(jì)算,這樣我們的服務(wù)器一定是既有一個好的CPU又有一個好的磁盤,也會造成我們的服務(wù)器成本很高。
貌似這樣可以解決了問題,但是還不是最優(yōu)質(zhì)的,這時來了一個大佬,馬丁福勒,就是這個人。他第一次提出了微服務(wù)的思想。我們來簡單拆分一下。
及時用戶量大增,我們覺得我們的訂單服務(wù)有壓力了,我們只需要增加我們的訂單服務(wù)的服務(wù)器就可以了。
我們來明確幾個定義,什么是微服務(wù)?什么又是微服務(wù)架構(gòu)?
微服務(wù):微服務(wù)核心就是把傳統(tǒng)的單機(jī)應(yīng)用,根據(jù)業(yè)務(wù)將單機(jī)應(yīng)用拆分為一個一個的服務(wù),徹底的解耦,每一個服務(wù)都是提供特定的功能,一個服務(wù)只做一件事,類似進(jìn)程, 每個服務(wù)都能夠單獨(dú)部署,甚至可以擁有自己的數(shù)據(jù)庫。這樣的一個一個的小服務(wù)就是 微服務(wù)。這個是摘自馬丁福勒的文章。比如我們的訂單服務(wù),可以成為一個微服務(wù),我們的積分服務(wù),也可以成為一個微服務(wù)。
微服務(wù)架構(gòu):微服務(wù)架構(gòu)是指把 一個一個的微服務(wù)組合管理起來,對外提供一套完整的服務(wù)。
對比優(yōu)缺點(diǎn):
我們現(xiàn)在有了微服務(wù)架構(gòu),難道我們所有的項(xiàng)目都可以調(diào)整為微服務(wù)架構(gòu)嗎?我們來看看傳統(tǒng)架構(gòu)和微服務(wù)架構(gòu)的優(yōu)缺點(diǎn)。
傳統(tǒng)架構(gòu)優(yōu)點(diǎn):
①.就一個war包,運(yùn)維超級幸福。
②.架構(gòu)簡單明了,沒有那些分布式事務(wù),分布式鎖等等問題。
傳統(tǒng)架構(gòu)缺點(diǎn):
①.代碼臃腫,每個程序員需要了解所有模塊的代碼。
②.代碼質(zhì)量參差不齊,每次改BUG容易碰瓷。
③.不便于做擴(kuò)展,架構(gòu)限制性強(qiáng),擴(kuò)展成本高。
④.部署難,代碼行過多,部署半小時很正常。
⑤.如果一個非核心模塊出現(xiàn)問題,會造成整體系統(tǒng)不可用,比如積分模塊內(nèi)存溢出,倒置整個系統(tǒng)宕機(jī)。
看起來傳統(tǒng)架構(gòu)缺點(diǎn)還是不少的,但是也不是每個項(xiàng)目都適合微服務(wù)架構(gòu)的,比如一個小OA系統(tǒng),本來功能就不多,你沒有必要去拆分服務(wù)了,對吧~!我們再來看看微服務(wù)給我們帶來了什么優(yōu)缺點(diǎn)吧。
微服務(wù)的優(yōu)點(diǎn):
①.程序員不需要了解整體業(yè)務(wù),只需專心研究自己關(guān)注的業(yè)務(wù)即可。
②.改BUG時不用提心吊膽,頂多影響自己的服務(wù)不可用,不會導(dǎo)致整體不可用。
③.便于后期的擴(kuò)展,也可以隨時應(yīng)對需求的變化。
微服務(wù)的缺點(diǎn):
①.部署困難,對于運(yùn)維人員有一些壓力(k8s+docker+jenkis )
②.服務(wù)之間的通訊增加了通訊成本。
③.帶來了分布式事務(wù),分布式鎖,分布式JOB等等問題等待我們來解決。
微服務(wù)的適用場景:合適,大型復(fù)雜的項(xiàng)目(來自單體架構(gòu)200W行代碼的恐懼) ,適合快速迭代的項(xiàng)目(來自一天一版的恐懼) ,適合并發(fā)高的項(xiàng)目(考慮彈性伸縮擴(kuò)容的恐懼) ,但我們的微服務(wù)不合適那些業(yè)務(wù)穩(wěn)定,就是修修bug?,改改數(shù)據(jù)的系統(tǒng),迭代周期長,發(fā)版頻率一二個月一次的穩(wěn)定系統(tǒng)。
微服務(wù)架構(gòu)是一個架構(gòu)風(fēng)格, 提倡
①.將一個單一應(yīng)用程序開發(fā)為一組小型服務(wù)。
②.每個服務(wù)運(yùn)行在自己的進(jìn)程中。
③.服務(wù)之間通過輕量級的通信機(jī)制(http rest api)
④.每個服務(wù)都能夠獨(dú)立的部署
⑤.每個服務(wù)甚至可以擁有自己的數(shù)據(jù)庫
搭建nacos:
終于到了我們的代碼環(huán)節(jié),好討厭寫那些理論的定義。
eureka很多人都知道,我們的nacos和eureka的功能差不多,就是eureka是springcloud netflix的nacos是springcloud alibaba的。
nacos的官網(wǎng)是這樣說的:Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您實(shí)現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置管理、服務(wù)及流量管理。Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu)(例如微服務(wù)范式、云原生范式)的服務(wù)基礎(chǔ)設(shè)施。
我們盡快進(jìn)入我們的代碼環(huán)節(jié)吧。
2.下載完成直接解壓即可。命令:tar -zxvf nacos-server-1.1.4.tar.gz
3.切換到nacos目錄下的bin目錄,輸入./startup.sh?-m?standalone啟動即可。
4.輸入lsof -i:8848,檢查我們的服務(wù)是否啟動成功。
5.在地址欄輸入http://你服務(wù)器的IP:8848/nacos訪問即可。賬號nacos,密碼nacos,注意你自己的防火墻關(guān)閉,端口外部訪問打開。
單機(jī)的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和端口加入進(jìn)去,例如
192.168.138.110:8848
192.168.138.111:8848
192.168.138.112:8848
③.修改application.properties配置文件,加入mysql配置
spring.datasource.platform=mysql
# 數(shù)據(jù)庫實(shí)例數(shù)量
db.num=1
# 自己數(shù)據(jù)庫的連接信息
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
④.初始化數(shù)據(jù)庫文件,腳本文件在你的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
總結(jié):
目前為止,我們應(yīng)該對于微服務(wù)和微服務(wù)架構(gòu)有一定了解了。這次我們主要說的我們的注冊中心nacos的搭建,和怎么把服務(wù)注冊到我們的nacos中去,還有我們的nacos的集群搭建,nacos還沒完事呢,后面我會出nacos的使用,和內(nèi)部的一些概念,比如組,版本什么的,到時候看看和ribbon一起說吧。下次博客我們來說說我們的eureka配置吧。
最進(jìn)弄了一個公眾號,小菜技術(shù),歡迎大家的加入
總結(jié)
以上是生活随笔為你收集整理的java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 斗地主桌号_求用java编写的
- 下一篇: java引用类型使用场景_下面有关jav