微服务系统项目
三层架构
web系统开发的三层架构
- 表示层ui
- 业务逻辑层BLL
- 数据访问层DAL
优点:
- 分层
- 业务逻辑可以多人开发
- 层与层分工明确,可以让设计更简单
- 后期维护成本以及升级
- 避免了表示层直接访问数据层,可以让数据更加安全
- 分层的设计可以提升复用
- 更方便移植
缺点:
- 会让项目开发变得更复杂
- 分层影响性能
- 开发成本大
当前常见的项目架构
单体式项目
优点:
- 开发简单
- 基本不会重复开发
- 功能都在本地,没有分布式的管理和调用消耗
缺点
- 效率低
- 维护难
- 稳定性差
- 不灵活
分布式应用
四个特征:
- 分布性
- 自治性
- 并行性
- 全局性
优点:
- 资源共享
- 加快计算速度
- 可靠性强
- 通信方便快捷
缺点 - 可用软件不足,系统软件,编程语言,应用程序以及开发工具较少
- 存在网络的安全问题,方便的数据共享同时意味着机密数据容易被窃取。
微服务
特点:
特征
- 一些系列独立的服务共同组成系统。
- 单独部署,跑在自己的进程中。
- 每个服务为独立的业务开发。
- 分布式管理。
- 非常强调隔离性。
优点
- Microservice架构模式解决了复杂性的问题。
- Microservice架构使每个服务都能够由专注于该服务的团队独立开发。
- Microservice架构模式使每个微服务都能独立部署。
- Microservice架构模式使每个服务都可以独立调整。
缺点
- Microservice过度强调服务规模,但这只是一种手段,而不是主要目标。微服务的目标是充分分解应用程序,以便于敏捷应用程序开发和部署;
- 分布式系统通信的复杂性。开发人员需要选择和实现基于消息传递或RPC的进程间通信机制。此外,他们还必须编写代码来处理部分故障,因为请求的目的地可能很慢或不可用;
- 设计复杂的分区的数据库架构。
- 测试微服务应用程序更复杂。
- 维护微服务更加复杂,比如实现跨越多个服务的更改。
- 部署基于微服务的应用程序也更复杂。
常见的微服务框架组件
spring cloud
Eureka注册中心
Ribbon负载均衡
Feign Http客户端
Hystrix容错或延时
Config配置中心
RabbitMQ消息队列服务工具
消息队列
- 先进先出
应用
- 应用的解释
- 流量削峰
- 消息分发
- 异步消息
RabbitMQ
- AMQP
- 组成
- BRoker 消息队列进程
- Exchange 消息队列路由
- Queue消息队列
- Producer消息生产者
- Customer消息消费者 - 部署
- docker pull rabbitmq:management
- docker run -id --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management # 未设置密码
- docker run -id --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management # 设置了用户和密码
- docker start rabbit
rabbitmq管理页面访问http://ip:15672/。
Redis缓存数据库
是一个键值对型的内存数据库,也是NoSQL数据库的一种。
特点:
- 性能很高
- 具备数据持久化能力
- 有丰富的数据类型支持:String、哈希Hash、列表List、集合Set、有序集合Sorted Set
- 原子性15672
- 丰富的特性,如:发布/订阅、通知等
- 主从复制
docker pull redis
docker run -id --name redis -p 6379:6379 redis
docker start redis
docker exec -it redis redis-cli #启动docker容器中的redis的客户端
docker exec -it redis redis-cli --raw #中文数据正常显示
docker exec -it redis redis-cli -h host -p port -a password
基本命令
docker exec -it redis redis-cli
127.0.0.1:6379>下执行命令
set key value #创建键值对,键存在则更新值
setnx key value #创建键值对,键不存在则创建,防止覆盖
setex key seconds value #创建键值对,几秒内内存在,过期自动清除
mset key1 value1 key2 value2 #创建多个键值对
keys * #查看所有键
get key #查看指定键的值
mget key1 key2 #查看多个键的值
incr key #自增
decr key #自减
incrby key increment #增加多少
decrby key decrement #减少多少
strlen key #字符长度
哈希指令
hset key field value #创建键 字段 属性
hmset key field1 value1 #创建键 多个字段属性
hkeys key #查看键的所有字段
hkeys value #查看键的所有属性
hgetall key #查看键的所有字段和属性
hmget
hkeys
hvals
hlen
hincrby
hexists #判断是否存在
list
lpush #左添加
rpush #右添加
lrange list 0 -1 #显示所有的数据
lrange list 0 1 #显示指定长度数据
lpop #左弹出
rpop #右弹出
llen list #列表的长度
lset list 1 dog #修改某个位置
linsert list after(或者before) dog cat #在前后添加
lindex list 2 #查看指定的数据
集合
sadd
smembers #查看所有
sismember #查看是否为什么
scard #集合长度
spop #弹出指定
srem #删除指定元素
srandmember #
sscan ball 0 match *e count 2(分页) #匹配查询
sdiff s1 s2 #比较差异
sunion #并集
sinter #交集
有序集合
zadd
zrange height 0 -1
zrevrange height 0 -1 #倒序
zrank #第几位
zrevrank #逆向排序序数
zscore #显示键的值
zrangebyscore #显示值的键
zincrby #增加
常用命令
type age #查看类型
del sex #删除
expire age 10 #加过期时间
desize#查看存了多少健
lastsave#最后一次修改数据库值的时间,返回时间戳
select 0 #切换数据库
flushdb#清空当前数据库
flushall#清除所有数据库数据
Redis存储策略
两种方式RDF和AOF
四种数据持久化策略:
- 默认策略。RDF方式,定期写入数据快照
- AOF,每次写操作都追加记录到一个文件中
- RDF和AOF同时有效,重启后,优先加载AOF策略‘
- 不适用任何数据持久化方式
python使用redis
pip install redis
from redis import Redis,ConnectionPool
//redis连接方式一
red=Redis('172.16.6.69',db=1)
red.set('name','zhangsan')
name=red.get('name')
//redis连接方式二
pool=ConnectionPool(host='172.16.6.69',port=6379,db=1)
red=Redis(connection_pool=pool)
red.hset('student','name','lisi')
name=red.hget('student','name')
//redis连接方式三(推荐使用 )
pool=ConnectionPool(host='172.16.6.69',port=6379,db=1,decode_responses=True)
red=Redis(connection_pool=pool)