一、架构即代码
    微服务系统的架构往往指的是服务之前的调用和依赖关系。架构即代码指的是通过DSL语言(如Graphviz等工具)来描述架构图,并将其放在代码库中以版本化的方式管理起来。

    二、接口即代码
    服务的API接口随着系统架构的演进而不断发生变动。通过Swagger之类的工具可以通过DSL方便地定义API的详细信息并以可视化的方式呈现。可以将Swagger生成的YAML代码保存在微服务的代码库中。Java微服务中可以引入swagger-springmvc插件,内嵌了Swagger-UI,直接访问即可查看服务的API信息。

    三、本地运行服务
    开发人员希望在本地运行服务,便于代码调试和功能测试。
    对于纯前端的工程,可以通过npm start的方式直接启动服务。
    对于后台服务,开发环境、镜像环境、测试环境有着不同的配置中心,当开发机器能够同其他服务所在的主机通信的时候,配置好测试环境的注册中心、数据库等的地址和端口等信息即可。

    四、OnePage文档
    微服务的开发人员需要知道微服务的基本信息。通常将其记录在文档中,称为“OnePage文档”。主要包含以下信息
    微服务综述:名称,基本功能,消费者,API
    微服务SLA:可用性,不可用的时间段
    架构相关:微服务依赖的组件、服务、数据库等
    运行环境:测试环境、预生产环境、生产环境的访问地址和访问方式等
    开发相关:开发环境配置方式、本地启动方式、调试方式、开发流程等
    测试相关:
    流水线相关:持续集成地址、构建包存储地址等
    运维相关:
    常见问题链接:

    五、前后端分离
    前后端分离指的是后端提供数据接口,前端页面请求各个服务API,聚合数据并展现,完成交互逻辑。

    前后端分离的有点是明显的。
    前后端分离使得前后端的职责更为清晰,前端负责展示,后端提供数据接口。有助于提升开发效率,降低维护成本。
    前后端分离有助于性能提升。前端可以存放在文件服务器上,系统运行时可以独立地对后端进行伸缩。

    前后端分离也带来了额外的挑战。
    适配问题。需要适配不同的客户端。
    协作问题。需要对前后端之间的协作进行额外的测试。
    SEO问题。把需要SEO的内容放在前端的HTML中。
    跨域问题。

    下面提供一个典型的前后端分离的案例。
    前端以静态文件的方式保存在文件服务器S3上。index.html需要在CSS/JS等资源文件上传之后上传。
    前端的访问日志上传到Splunk上,方便统计和追踪。
    使用CDN加速页面加载。
    后端API为典型的在EC2上部署的架构。

    六、微服务与安全