1. 程式人生 > >SpringCloud微服務實戰專案總結

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