- 表示层ui
- 业务逻辑层BLL
- 数据访问层DAL
优点:
- 分层
- 业务逻辑可以多人开发
- 层与层分工明确,可以让设计更简单
- 后期维护成本以及升级
- 避免了表示层直接访问数据层,可以让数据更加安全
- 分层的设计可以提升复用
- 更方便移植
缺点:
- 会让项目开发变得更复杂
- 分层影响性能
- 开发成本大
单体式项目
优点:
- 开发简单
- 基本不会重复开发
- 功能都在本地,没有分布式的管理和调用消耗
缺点
- 效率低
- 维护难
- 稳定性差
- 不灵活
四个特征:
- 分布性
- 自治性
- 并行性
- 全局性
优点:
- 资源共享
- 加快计算速度
- 可靠性强
- 通信方便快捷
缺点 - 可用软件不足,系统软件,编程语言,应用程序以及开发工具较少
- 存在网络的安全问题,方便的数据共享同时意味着机密数据容易被窃取。
特点:
特征
- 一些系列独立的服务共同组成系统。
- 单独部署,跑在自己的进程中。
- 每个服务为独立的业务开发。
- 分布式管理。
- 非常强调隔离性。
优点
- Microservice架构模式解决了复杂性的问题。
- Microservice架构使每个服务都能够由专注于该服务的团队独立开发。
- Microservice架构模式使每个微服务都能独立部署。
- Microservice架构模式使每个服务都可以独立调整。
缺点
- Microservice过度强调服务规模,但这只是一种手段,而不是主要目标。微服务的目标是充分分解应用程序,以便于敏捷应用程序开发和部署;
- 分布式系统通信的复杂性。开发人员需要选择和实现基于消息传递或RPC的进程间通信机制。此外,他们还必须编写代码来处理部分故障,因为请求的目的地可能很慢或不可用;
- 设计复杂的分区的数据库架构。
- 测试微服务应用程序更复杂。
- 维护微服务更加复杂,比如实现跨越多个服务的更改。
- 部署基于微服务的应用程序也更复杂。
spring cloud
Eureka注册中心
Ribbon负载均衡
Feign Http客户端
Hystrix容错或延时
Config配置中心
消息队列
- 先进先出
应用
- 应用的解释
- 流量削峰
- 消息分发
- 异步消息
- 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 #增加
常用命令
Redis存储策略type age #查看类型
del sex #删除
expire age 10 #加过期时间
desize#查看存了多少健
lastsave#最后一次修改数据库值的时间,返回时间戳
select 0 #切换数据库
flushdb#清空当前数据库
flushall#清除所有数据库数据
两种方式RDF和AOF
四种数据持久化策略:
- 默认策略。RDF方式,定期写入数据快照
- AOF,每次写操作都追加记录到一个文件中
- RDF和AOF同时有效,重启后,优先加载AOF策略‘
- 不适用任何数据持久化方式
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)



