三种架构含义
IAAS:硬件即服务,CPU、内存、存储、网络和其它基本的计算资源作为一种服务提供给客户。如 华为云、阿里云、腾讯云等
PAAS:开发平台即服务,软件研发和部署平台,包括应用设计、开发、测试、托管在内作为一种服务提供给客户。如微信小程序开发平台,qq空间游戏开发平台等
SAAS:软件即服务,提供给用户一个后台管理系统,客户只需要有一个账号即可,登录后根据需求订购菜单功能, 如 钉钉,石墨等
PAAS
通过springboot构建paas平台(开发平台)给开发者用,同时使用基于springclould的微服务设计部署到docker中,优化了SOA(面向服务的架构)同时避免了ESB的webservice注册服务xml通信的各种问题,
部署
建立集群保证高可用、负载均衡
分布式系统负载均衡、降压,降维
微服务架构避免代码复制,业务重复
可以通过编号-》找最小编号-》加锁-》删除编号,再不断循环的方式处理分布式锁的问题,通过CAS在关键数据上尽量进行原子操作
自定义协议
- 通过API网关隐藏内部RPC或其他各种通信方式,最后暴露给外部统一的Rest API给各个APP访问
- NIO使用selecter实现多路复用,内部通信使用Protobuf二进制会有比json更高的效率
- restful省去了描述动词,是风格不是标准
- http2使用了头部压缩,多路复用等技术,https使用了非对称加密算法
- 考虑用TCP代替HTTP是因为每次都要传输的header在某些场景中是无用的
PAAS优势
传统的ERP、OA、CRM等系统由于其独立性,易造成数据孤岛,最后还要用数据同步中心或MQ之类做数据同步和处理,通过PAAS平台开发的应用可以独立出用户、权限分配、全局配置等功能在PAAS平台做统一处理,在一定程度上避免了上述情况
数据湖
使用多个数据库负责不同层面的数据
如底层 数据仓库 中层 抽象主题层 顶层 业务相关层 分别用三个数据库存储数据
各个系统数据量大且复杂,使用ETL工具清洗并转换后转移到上层
mysql关系数据库
mysql引擎
- 默认Innodb:支持事务、行级锁、外键、binlog日志恢复等
- MyISAM:有较高的插入、查询速度,但不支持事物
- MEMORY:存在内存中,速度快
- NDB:集群存储引擎,更高级别的高可用性和可扩展性。存在内存中,速度快
- Heap:存在内存中,如果数据库重启或崩溃,数据丢失,适合存储临时数据
- Archive :适合存储日志信息。只支持 INSERT 和 SELECT 操作,高速插入和压缩
数据库分布式
- 数据库切分
- 垂直切分:不同表分到不同数据库上
- 水平切分:同一张表根据某种逻辑(如编号取模)分到不同数据库上
分库后join可以通过开启Mrg_Myisam引擎,然后创建连接表,使其支持join
数据库集群
- 主主库
采用NDB引擎,把数据写入主库,同时通过binlog同步到其他节点库,通过负载均衡算法控制访问哪个数据库写入和查询 - 主从库读写分离
把数据写入主库,同时通过binlog同步到从库,查询操作都从从库查询
数据库集群的数据一致性保证
influxdb时序数据库
Binlog事务并成功写入Relay Log之后,才返回Commit操作
采集
很多传感器如温度 湿度 电表 等数据采集后会进入时序数据库
如
InfluxDB简单操作
influx
> use dbName
> show measurements
> select * from "table" where xxx="xxx" limit 100
> insert table,xxx=xxx,xx=xx 1572319728000000000(时间戳 纳秒)
数据通常按照时间顺序插入
更新几乎没有
读取某个时间段的数据,删除某个时间段的数据
传输
一般通过kafuka等MQ传输
缓存
一般使用Reids做缓存
容错
崩溃后 一般使用硬盘保存数据
分层
一般分三层
采集数据 -> 数据湖->抽象主体层->业务层
使用ETL工具清洗并转换后转移到上层