在经历多次项目技术改革,现在的技术架构基本稳定下来了。一个人的开发不容易啊,想在这里分享下自己的一些想法和走过的一些坑,希望能够帮助到大家。下面放下我现在的技术架构。
Docker是个好东西,虽然阿里出了函数计算,但在使用的时候,发现还是缺乏些火候,而且现在的函数计算还是比较适合高CPU型api,鄙见鄙见~
阿里docker的流程:
- 创建code仓库
- 创建docker镜像
- 创建docker容器服务
- 创建docker的时候,阿里会自动部署负载均衡(https的放在下个文章更新)
一般,我的项目结构是这样的:
-
-project
- -api // 项目的api
- -app // React-Native,移动端
- -www // 项目主页
- -admin // 项目后端管理系统
- -h5 // 宣传H5
- -Dockerfile // 部署api使用
贴上我的api的通用dockerfile
FROM node:7
MAINTAINER Mumudeveloper
#hardcode
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN yarn global add forever
# Create www directory
RUN mkdir -p /api
COPY ./api /api
# Install www dependencies
WORKDIR /api
RUN yarn install
EXPOSE 7001
# Define default command.
ENTRYPOINT forever start -l forever.log -a index.js && tail -f ~/.forever/forever.log
好!重点来了,敲黑板!
大家注意到我这一行没有,嗯,这是我跑docker的时候遇到的第一个坑啦!
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
去年,做了一个中间商平台,订单是按照时间来定价格了,一个时间一个价格,因为市场是波动的,当时我怀抱着一种很开心很高兴觉得自己很流逼的心情,把项目部署在docker上。部署完后,高高兴兴的睡觉了,因为明天还要上班呢!突然凌晨1点,合作方打电话过来,很急很急的样子,一接电话,我的心都凉了,晚上提交的几千订单,时间错误!!!
急急忙忙的起身,查bug,现在想来都心塞塞...orz...
最后原因找到了,原来是阿里部署的docker是基于原版镜像的,时间是以美国还是伦敦为标准了(具体忘记了),当时我的临时方案是远程登录上了docker服务器,因为只是部署了三台服务器,所以就一台台的改...
第二天一早就提了个工单,希望能得到处理,发现暂时还实现不了,而且优先级也不高。但我觉得吧,阿里的同学应该把这个时间问题写文档,提醒给使用阿里docker的童鞋。不过如果是公司运营的话,一般都有测试,所以上线发生这种问题估计是很少的。
后来对那些订单的处理方案是让合作方和他们对接的平台商量,手工处理前后两天的订单,处理了三天,内心无比愧疚~
嗯,大家如果是做国内业务,还是最好在dockerfile上加上这句话好了。