参考
- Spring Microservice in Action
- RESTful Service Best Practices
- Do you really know why you prefer REST over RPC?
Sql vs NoSql
Sql关系型数据库
问题
- 结构死板:表结构更新难度,可能需要迁移
- 不适于数据结构经常变化的互联网应用
- 每次变化开发强度较大,需要改动的地方多
- Scale难度大
- Master-Slave模式
- Sharding难度大
- 缓存效率不高
- 新操作支持比较弱
NoSql数据库
问题
- 数据完整性与一致性
- 缺乏事务支持
- 缺乏外键支持
- 可以有原子操作
- 不支持Sql查询
- 已有项目的迁移问题
HTTP、RPC、Restful
HTTP
特点
- 解决问题:
- 客户端到服务端的www通讯问题
- 客户端到服务端拿资源问题
- Request-Response模型
- 基于text文本协议
- 无状态
- 支持session
RPC
特点
- 像调用本地方法一样调用远程方法
- 通过消息传递request-response
- 消息格式可以多种多样
- 可以同步、异步和One-Way
- 支持非常多的协议,http只是其中一种
Restful
Rest(Representational state transfer)特点
- 客户端到服务端资源增删改查(还有其他)操作
- 面向资源,无状态
- 整齐的操作(URL)规范,好缓存
- 服务端实现一群无状态的操作
问题
- 数据定制问题
- 多次请求问题
- 异常处理问题
- 返回数据格式与字段未知,过分依赖文档
- PUT和DELETE需要前后端支持
- 每个resoure都有自己的一组end point或者URL
- 管理维护困难
- 安全隐患
- 在URL上传参可能会暴露敏感信息
单体服务 SOA 微服务
单体服务
特点
- 往往单一编程语言单一框架实现
- 各个模块之间紧耦合
- 牵一发而动全身
- 海量测试用例
- 巨型软件包
- 部署时间比较长
- 监控难度大
微服务
特点
- 每个微服务可以独立开发、独立测试、独立部署
- 不同微服务可以采用不同编程语言,不同框架
- 微服务间松耦合(RPC或Rest API)
- 每个服务往往是一个独立的业务系统