各位领导好,我从毕业后做了两年Java开发工程师,刚开始都是一些SSM框架的项目,但是由于技术不断更新,微服项目成为必然的趋势,大约在做了1年的SSM框架,之后开始接触微服项目,前后经理过Dubbo和SpringCloud两种框架,接下来我就介绍一下简历上的第一个项目。
首先它是一个基于Springcloud框架的名为“永乐票务”的微服项目,我们项目组负责了大概20多个模块,这个项目期间我自己独立承担的大概八个模块。其实前期我还参加了SSM项目,大致的功能就是支撑永乐票务的系统的功能。所以说真正的微服我只大概做了半年。我们项目组负责了大概20多个模块,这个项目期间我自己独立承担的大概八个模块。像登录模块,支付模块,通用模块,管理模块,权限模块,运营模块等等。在做这个项目期间我也学到了很多知识。
总体来说,系统采用的是基于Springcloud的微服项目,采用的是中台架构。另外也接触了很多技术,比如说Vue、Angular.js、LayUi、ElementUi、Node.js、微信小程序,微信公众号,支付宝这些第三方技术,另外呢我还接触接触到了缓存技术Redis,全文索引技术Elasticseach,还接触了一些环境,也可以去搭建一些环境,比如说Elasticsearch+Logstash+kibana+Kafka实现分布式系统日志收集系统的搭建和使用,此外还可以搭建一个docker环境,实际上我们的项目考虑到成本和性能的原因,所以我们将我们的整个系统搭建在docker之上,实际上当时运维人员稀缺,之前一直在做的离职了,所以我当时也参与了服务部署事项,所以我可以通过dockerfile脚本文件完成整个项目的部署。
另外,我还参与了很多功能上的设计和环境上的实现,举个例子说吧,我们设计了一个原生的权限框架,不同的用户有不同的角色,不同的角色有不同的权限,系统之中有一个类似于审批流程的概念。其实谈设计数据库可以采用的是分库分表的方式,我们采用的是Mycat,这是一个基于Mysql的数据库中间件来进行分库分表,分片的规则是Partition by mode,用分库分表的原因主要是我们的订单业务数据量实在太大,所以呢根据这一业务需求,我们去做了这一个扩容。当时在使用了Mycat之后确实数据库压力有所减轻。
其实在数据库中间件之前呢,我们还有一个技术叫做redis+token令牌机制实现登录,它能够解决传统session登录的问题。像集群服务器当中这个Session共享的问题,众所周知这个session的效率不高,还耗费资源。谈到这个令牌机制,谈到Redis,不得不谈消息队列,实际上就是消息中间件,之前用过很多消息中间件,像构建分布式系统日志收集系统时用的Kafka,多线程高并发多用户抢购的问题时用到了ActiveMq,还有用作事务的RabbitMq,我印象比较深的是当时的一个类似于双十一抢购的抢购服务当中使用ActiveMq,这个主要是利用redis分布式锁setnx原理,引入分布式锁的原因是为了解决抢购过程中的安全问题,主要是抢超和重复抢的问题。
所谓的分布式锁其实就是上锁和去锁,当我们每次调用抢购方法的时候每次要去上锁,抢购完成之后要去锁,后面的用户才能重新获得锁,再去抢购商品,同样的抢购的时候也需要上锁。上锁的时候需要给锁设置一个有效时间,如果锁一直存在达到一定时间会直接让锁失效,这样让系统不会因为一个用户一直卡住。在我们引入分布式锁之后,发现分布式锁有一个致命问题,当时我们使用的是Apache提供的高并发压力测试工具Jmeter,这个工具可以模拟多线程情况下多个用户抢购的情况,测试出来分布式锁的效率比较低。于是我们引入ActiveMq来解决效率低下的问题,实现流量削峰。当我们用户发送一个抢购请求的时候,用户会直接得到一个排队成功的返回信息,实际上处理这个抢购请求的还是我们的consumer,然后处理完成之后将是否抢购成功发给ActiveMq,然后配置一个监听器,后端做一个轮询接口,前端利用cros实时调用这个轮询接口,这样前端就可以不用等待,是一个异步请求,并且接近实时的获取是否抢购成功。这是一个完整的抢购业务和解决方案,能完成这个部分,这是我比较自豪的。当然了这些部分也是和项目组的人一起做的。
另外,在项目中也有其他的一些技术,比如说支付宝字符接口,百度地图Api,短信验证接口,报表等等。报表就是将项目中的信息以excel的形式导出来,共客户方财务或者我们的运维人员使用。当然报表模块使用的也就死一个工具类Jcreporter,直接调用即可。
最后呢,我想说的是我其实也不是什么大咖,项目都是以团队的形式做的,大家分工合作。我也有许多技术需要去学习,希望贵公司可以给我一个机会,为公司创造价值,提升自己。