三种架构含义

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 操作,高速插入和压缩

数据库分布式

  1. 数据库切分
  • 垂直切分:不同表分到不同数据库上
  • 水平切分:同一张表根据某种逻辑(如编号取模)分到不同数据库上

分库后join可以通过开启Mrg_Myisam引擎,然后创建连接表,使其支持join

数据库集群

  1. 主主库
    采用NDB引擎,把数据写入主库,同时通过binlog同步到其他节点库,通过负载均衡算法控制访问哪个数据库写入和查询
  2. 主从库读写分离
    把数据写入主库,同时通过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工具清洗并转换后转移到上层