SpringCloud微服務實戰專案總結
一、前言
在微服務的浪潮下,公司原有的架構已經嚴重跟不上日益發展的業務需求,隨著使用者量的增加,架構越來越臃腫,乃至沒有人敢於去動原有的架構,加之架構已經有7、8年的歷史,前前後後的開發人員也換過一批有一批,一旦修改,輕則bug一堆,重則牽一髮動全身,所以只能繼續沿用現有的架構,繼續疊加新功能,繼續改改補補。
基於這樣的背景,於去年(也就是2017年)年中開始選型微服務框架,開始進行架構的改造,開始嘗試新的架構體系。
二、過程
選擇的過程總是坎坷的,當初有springcloud、有dubbo、有springboot,技術骨幹在一起不斷的
討論,爭執,各抒己見(眼看著就要打起來了,程式設計師永遠會選擇自己最熟悉的技術去解決問題),
在這樣的情況下,最終還是選擇了下述架構組合:
(圖片參考了《某金融公司的架構體系》)
架構中涉及的技術如下:
在這樣的架構體系下,團隊成員各司其職,在經歷了4個月左右的開發時間,最終出了V1.0的版本,
並且有了第一批近5萬的使用者,只是從這個過程和結果來說,還是相對成功的。
我們的應用就這麼上了百度應用市場和360應用市場。
可是,就這麼看似成功的一個產品,在剛剛上線後不久,公司就因為各種原因竟然要將其放棄,
或者說是暫停擱置,延續原有的產品體系,繼續開拓市場。並且公司潛在的定性這個新的產品是
失敗的。(知道這對於技術團隊或者產品團隊來說是多麼大的打擊麼???)
然而,並沒有所謂的總結會,也並沒有所謂的"覆盤會",有的只是內部的各種矛盾、各種負面
的訊息。
三、希望
事情難道就這麼結束了?答案當然是NO!
眼看著專案擱置,最先使用的客戶要求繼續使用,於是,一個面向全國的saas產品,一個採用
了全新微服務架構旨在滿足千萬使用者使用的技術架構,就這麼硬生生的轉成面向單個客戶使用的
定製化專案了。
當然,這未嘗不是件好事!
於是,在客戶的要求下,基於1.0的產品版本,疊加了客戶要求定製開發的新功能:功能1、功
能2、功能3、。。。。。功能N,然後產品的名字也換成了客戶要求的名字。。。
一切似乎正在朝著好的方向發展!
公司開始新的決策:基於該產品,如果有客戶需要定製,就基於這個來做,既不浪費之前幾百
萬的成本投入,又能夠開拓新的市場機會。
非常好的一個決定!
四、遷移前
公司原有的部署都使用阿里雲伺服器,我們的微服務架構使用了將近15臺伺服器,大致如下:
而這些還不是所有的,加上我們的測試伺服器、預生產伺服器、開發伺服器,一共將近30臺服
務器。
現在要將所有的應用都部署到客戶自己的伺服器環境中,那就涉及到將現有的應用、環境、數
據都進行遷移。
一想到要遷移我的頭就大了!
五、遷移過程
客戶那邊都是虛機,出於環境安全考慮,要求我們在本地搭建好虛機環境後匯出ova檔案,由
客戶那邊的資訊部門人員進行匯入;而不是客戶提供虛機由我們在虛機上進行環境部署。
於是漫長的虛機構建過程就在本地展開了:(由於原來負責搭建的人員因各種原因離職了,
所有的環境只能由我親自構建)
這是經過了將近3個禮拜構建的所有虛機,虛機中包含了docker環境、資料庫環境、叢集環境、
nginx環境、redis環境、mongodb環境、springcloud環境、全文檢索環境等等。
構築過程中積累了一些不是很熟悉的技術點,簡要整理如下,大家也可以看看:
1、Ifconfig命令
yum -y install net-tools
2、安裝檔案系統和掛載
1)檢查是否缺少基礎環境
rpm -qa | grep nfs-utils
rpm -qa | grep rpcbind
2)如果沒有則安裝
yum -y install nfs-utils
yum -y install rpcbind
3)安裝完成之後配置nfs訪問目錄,配置檔案位置/etc/exports,預設是空的這裡新增一行:
/nfs_test 192.168.1.8(rw,no_root_squash,no_all_squash,async) 192.168.1.9(rw,no_root_squash,no_all_squash,async)
4)配置完後啟動服務
systemctl start rpcbind.service
systemctl start nfs.service
5)啟動之後可以通過status來檢視狀態,如果下次修改了配置,可以重啟服務來使配置生效,也可以直接執行如下命令重新整理配置:
exportfs -a
重新整理配置即可生效
現在服務端配置完畢,可以在對應的主機上來配置客戶端了,需要的環境和服務端一樣,要保證安裝nfs-utils和rpcbind
保證環境沒問題和上面一樣啟動rpcbind服務和nfs服務
首先建立掛載點: mkdir /mnt/test1
然後掛載nfs: mount -t nfs 192.168.1.3:/nfs_test /mnt/test1
掛載成功之後通過 df -h 可以檢視掛載的情況,nfs可用空間就是服務端/nfs_test目錄所能使用的最大空間
現在就可以往nfs寫入資料了,服務端往/nfs_test讀寫資料和客戶端往/mnt/test1讀寫資料是一樣的,這樣就實現了檔案同步和共享
解除安裝nfs和普通檔案系統一樣,使用: umount /mnt/test1
如果需要設定開機掛載,在/etc/fstab新增一行配置即可: 192.168.1.3:/nfs_test /mnt/test1 nfs rw,tcp,intr 0 1 然後服務端和客戶端都要用enable設定nfs和rpcbind服務開機啟動,然後才可以正常掛載
3、檢視檔案目錄
檢視第一層級目錄大小
du -h --max-depth=1
檢視檔案數量
find /dir -type f |wc -l
4、設定主機名
Hostnamectl set-hostname ***
5、安裝Nginx
1) 新增CentOS 7 Nginx yum資源庫,開啟終端,使用以下命令:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2) 安裝Nginx
yum install -y nginx
3) 啟動Nginx
systemctl start nginx.service
4) 開機啟動Nginx
systemctl enable nginx.service
6、FTP安裝
#安裝
yum install -y vsftpd
#設定開機啟動
systemctl enable vsftpd.service
#啟動
systemctl start vsftpd.service
#停止
systemctl stop vsftpd.service
#檢視狀態
systemctl status vsftpd.service
7、VMware磁碟擴充套件方法
因內容比較多,請參考:https://blog.csdn.net/liumiaocn/article/details/78877957
8、Docker安裝配置
1)docker安裝
yum install docker
2)docker-compose安裝
這是一個基於docker做編排服務的工具
curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
3)修改許可權
chmod +x /usr/local/bin/docker-compose
4)檢視版本號
docker-compose --version
5)安裝自動補全命令包
curl -L https://raw.githubusercontent.com/docker/compose/1.18.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
6)拉去centos7+jdk8的映象
service docker start
docker pull hub.c.163.com/****/centos-jdk:latest
7)配置docker file和docker-compose.yml檔案
dockerfile示例:
<span style="color:#000000"># Pull base image
FROM hub.c.163.com/****/centos-jdk
MAINTAINER "****@qq.com"
ADD test-user-1.0.0.jar test-user-1.0.0.jar
RUN bash -c 'touch /test-user-1.0.0.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test-user-1.0.0.jar"]</span>
docker-compose.yml示例
<span style="color:#000000">version: '1'
services:
test-user:
build:
context: .
dockerfile: UserDockerfile
network_mode: "host"
volumes:
- /home/test/UpImgs/:/home/UpImgs/
- /home/test/logs/group/:/home/logs/
environment:
- TZ=Asia/Shanghai
- spring.profiles.active=test
- server.port=7900
- spring.datasource.url=jdbc:mysql://192.168.1.33:3306/test?useSSL=false&allowMultiQueries=true&useUnicode=true</span>
注意:docker-compose.yml是基礎核心的配置檔案,配置檔案如有和專案裡重複的地方,配置的東西會覆蓋專案裡的配置
8)編譯服務
<span style="color:#000000">docker-compose build test-user</span>
9)啟動服務
<span style="color:#000000">docker-compose up -d test-user</span>
10)檢視服務
<span style="color:#000000">docker-compose ps</span>
image.png
還有很多其他的就不一一羅列了,太多的點,真要說的話完全可以每個點寫一篇專題了~~
9、.遷移後話
話說就這麼把相應的環境等都搭建好了,雖然過程比較麻煩,但是還有個問題一直沒解決,那
就是----資料!
由於當前客戶已經在使用了,得跟客戶協商某個時間點,把服務暫停,然後把當前所有資料在
最快的時間內全部匯出,並快速遷移到真實環境中。
而實際業務的資料量也相當大,有幾十個G,全部要備份出來。。。
10、小結
專案還在繼續,一直有個疑問,也嘗試了一些方法,但是始終沒有很好的解決,正好在這裡
也問問各位有沒有好的解決辦法。
阿里雲或者華為雲都有映象匯出功能,我瞭解到阿里雲匯出的映象就是原始映象raw格式,但
真要像客戶要求的那樣,要生成ova或者ovf格式,有沒有什麼快速有效的辦法。
這次我就聯絡了阿里雲工程師,沒有給出很好的解決辦法,匯出的raw格式檔案有100多G,肯
定不是最好的辦法,而且匯出來後我在虛機中用VMware也沒有成功匯入,根本無法還原!
原文:https://blog.csdn.net/dongzhumao86/article/details/82848066