SpringCloud微服务实战项目总结(整体项目的辛酸泪)

举报
真爱无敌 发表于 2018/11/28 11:57:00 2018/11/28
【摘要】 在微服务的浪潮下,公司原有的架构已经严重跟不上日益发展的业务需求,随着用户量的增加,架构越来越臃肿,乃至没有人敢于去动原有的架构,加之架构已经有7、8年的历史,前前后后的开发人员也换过一批有一批,一旦修改,轻则bug一堆,重则牵一发动全身,所以只能继续沿用现有的架构,继续叠加新功能,继续改改补补。

1.jpg

一、前言

    在微服务的浪潮下,公司原有的架构已经严重跟不上日益发展的业务需求,随着用户量的增加,


架构越来越臃肿,乃至没有人敢于去动原有的架构,加之架构已经有7、8年的历史,前前后后的


开发人员也换过一批有一批,一旦修改,轻则bug一堆,重则牵一发动全身,所以只能继续沿用


现有的架构,继续叠加新功能,继续改改补补。


    基于这样的背景,于去年(也就是2017年)年中开始选型微服务框架,开始进行架构的改造,


开始尝试新的架构体系。


二、过程

    选择的过程总是坎坷的,当初有springcloud、有dubbo、有springboot,技术骨干在一起不断的


讨论,争执,各抒己见(眼看着就要打起来了,程序员永远会选择自己最熟悉的技术去解决问题),


在这样的情况下,最终还是选择了下述架构组合:


2.png


    (图片参考了《某金融公司的架构体系》)


    架构中涉及的技术如下:


    3.png


    在这样的架构体系下,团队成员各司其职,在经历了4个月左右的开发时间,最终出了V1.0的版本,


并且有了第一批近5万的用户,只是从这个过程和结果来说,还是相对成功的。


4.png

 

    我们的应用就这么上了百度应用市场和360应用市场。


    可是,就这么看似成功的一个产品,在刚刚上线后不久,公司就因为各种原因竟然要将其放弃,


或者说是暂停搁置,延续原有的产品体系,继续开拓市场。并且公司潜在的定性这个新的产品是


失败的。(知道这对于技术团队或者产品团队来说是多么大的打击么???)


    然而,并没有所谓的总结会,也并没有所谓的"复盘会",有的只是内部的各种矛盾、各种负面


的消息。


三、希望

    事情难道就这么结束了?答案当然是NO!


    眼看着项目搁置,最先使用的客户要求继续使用,于是,一个面向全国的saas产品,一个采用


了全新微服务架构旨在满足千万用户使用的技术架构,就这么硬生生的转成面向单个客户使用的


定制化项目了。


    当然,这未尝不是件好事!


    于是,在客户的要求下,基于1.0的产品版本,叠加了客户要求定制开发的新功能:功能1、功


能2、功能3、。。。。。功能N,然后产品的名字也换成了客户要求的名字。。。


     一切似乎正在朝着好的方向发展!


     公司开始新的决策:基于该产品,如果有客户需要定制,就基于这个来做,既不浪费之前几百


万的成本投入,又能够开拓新的市场机会。


     非常好的一个决定!


四、迁移前

     公司原有的部署都使用阿里云服务器,我们的微服务架构使用了将近15台服务器,大致如下:


    5.png


    而这些还不是所有的,加上我们的测试服务器、预生产服务器、开发服务器,一共将近30台服


务器。


    现在要将所有的应用都部署到客户自己的服务器环境中,那就涉及到将现有的应用、环境、数


据都进行迁移。


    一想到要迁移我的头就大了!


五、迁移过程

    客户那边都是虚机,出于环境安全考虑,要求我们在本地搭建好虚机环境后导出ova文件,由


客户那边的信息部门人员进行导入;而不是客户提供虚机由我们在虚机上进行环境部署。


    于是漫长的虚机构建过程就在本地展开了:(由于原来负责搭建的人员因各种原因离职了,


所有的环境只能由我亲自构建)


6.png    


    这是经过了将近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>

7.png


还有很多其他的就不一一罗列了,太多的点,真要说的话完全可以每个点写一篇专题了~~


6.迁移后话

    话说就这么把相应的环境等都搭建好了,虽然过程比较麻烦,但是还有个问题一直没解决,那


就是----数据!


    由于当前客户已经在使用了,得跟客户协商某个时间点,把服务暂停,然后把当前所有数据在


最快的时间内全部导出,并快速迁移到真实环境中。


    而实际业务的数据量也相当大,有几十个G,全部要备份出来。。。


7.小结

     项目还在继续,一直有个疑问,也尝试了一些方法,但是始终没有很好的解决,正好在这里


也问问各位有没有好的解决办法。


     阿里云或者华为云都有镜像导出功能,我了解到阿里云导出的镜像就是原始镜像raw格式,但


真要像客户要求的那样,要生成ova或者ovf格式,有没有什么快速有效的办法。


     这次我就联系了阿里云工程师,没有给出很好的解决办法,导出的raw格式文件有100多G,肯


定不是最好的办法,而且导出来后我在虚机中用VMware也没有成功导入,根本无法还原!


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。