赞
踩
系统架构风格是指描述 特定软件系统“组织方式”的“惯用模式”。“组织方式”描述了系统的“组成构件”以及构件的组织结构。 惯用模式则体现众多系统共有的结构和语义。
有哪些架构风格适合交互?哪些适合高性能?哪些更容易扩展?
常见的软件构件风格有哪些?
数据流风格:就比较适合复杂的数据处理/数据密集型应用,一个一个过程的处理,彼此间耦合度低。一系列的数据处理器。一个处理器流向另一个处理器并通过数据流传递。每个处理器只考虑特定的数据处理任务,不考虑流程,处理器彼此间耦合度低。案例:图像处理、信号处理。
调用/返回风格: 就是存粹的体现一种面向过程的,过程式的编程思想。通过函数调用推动过程进行,返回值返回函数结果。一系列的函数调用和返回,组合完成复杂的功能。比较适合流程简单,直观的开发场景。
独立构件风格:将系统分解为一系列独立的组件,并通过定义接口和协议来实现组件之间的通信和交互。组件通过接口的输入输出参数完成组件通信,降低了组件间耦合度,提高组件的独立可扩展性/模块化,进而使得系统更加灵活可维护。适用于大型系统的开发场景。
常见的独立构件风格是否大多是通过消息的形式来进行进程通信,然后使得消息绑定回调函数完成事件驱动系统?
是的,独立构件风格通常会采用消息传递的方式进行组件之间的通信,同时结合事件驱动的机制来实现系统的异步和非阻塞操作。具体来说,常见的做法包括:
这种设计模式在分布式系统、并发编程和大规模系统开发中得到了广泛应用,它能够提高系统的可伸缩性、可扩展性和灵活性,降低系统的耦合度,从而更好地满足复杂系统的需求。
Web架构综合考察。
”高性能“、”高可用“、“可维护”、应变、安全
架构演变过程
单台机器 到 数据库与Web服务器分离。为什么会这样?
对应用服务器做横向扩展,分布式部署多台应用服务器,提高并发量和响应性能。
但是,从一台应用服务器到多态应用服务器,会出现什么样的问题?如果用户每次访问到不同的服务器,如何维护session一致性?如何分发流量?
Session(会话)是指两个或多个通信终端之间建立的持续性的连接。在网络通信中,会话可以用来描述客户端和服务器之间的交互,通常涉及一系列的请求和响应。
无状态服务和有状态服务:
无状态服务(Stateless Service)是指服务本身不维护任何关于客户端状态的信息,每个请求都是独立的,服务不会存储客户端的状态信息。相反,有状态服务(Stateful Service)会在服务端维护客户端的状态信息,通过跟踪客户端的状态来处理请求。
简单来说,两者的区别在于服务是否在请求之间保留客户端的状态信息。
无状态服务(Stateless Service):
有状态服务(Stateful Service):
Session 和 Cookie 是用于实现状态管理的技术,可以在有状态服务和无状态服务中使用。
Cookie 是一种客户端技术,通过在客户端存储一些信息,如会话标识符、用户首选项等,来实现客户端的状态管理。Cookie 可以在有状态服务和无状态服务中使用。在有状态服务中,服务端可以使用 Cookie 来存储客户端的会话标识符或其他状态信息,以跟踪客户端的状态。在无状态服务中,Cookie 可以用于存储客户端的会话标识符,以便服务端识别客户端。
Session 是一种服务端技术,通过在服务端存储客户端的会话信息,来实现状态管理。Session 可以在有状态服务中使用,因为服务端会存储客户端的会话信息。在无状态服务中,虽然服务端通常不会直接存储客户端的会话信息,但是可以使用一些外部存储或者数据库来存储会话信息,实现类似于有状态服务的功能。
负载均衡技术分层:有哪些网络层的负载均衡技术?
应用层负载均衡:
传输层/网络层负载均衡:
常见的负载均衡算法:
动态负载均衡算法相比静态负载均衡算法更具有灵活性和适应性,可以更好地应对负载波动和服务器故障等情况。然而,动态负载均衡算法通常需要更多的计算和资源,因此在实际应用中需要权衡选择。
动态负载均衡、动态内存池和弹性线程池确实在某种程度上具有相似的特点,但它们所解决的问题和应用场景略有不同。
对数据层进行抽象,ORM(Object relation map)对象关系数据映射。说白了就是对数据表的操作进行面向对象的封装。为业务层提供简单易用的数据表操作接口层,实现业务层与数据层的解耦合。业务层依赖的只是ORM提供的一层接口,底层数据库做变更、修改,业务层并不关注。
缓存的应用:提高读取性能。常用的缓存中间件,memachached、redis. 缓存减少了数据库压力,提高了读取性能。
Redis技术:高性能(内存、IO模型、耗时操作的异步处理)、高可用(容灾备份、数据冗余)、高可靠(持久化)。
Redis持久化:AOF、RDB.
Redis 的主从模式(1 master + n slave读写分离/负载均衡、应对读多写少,数据备份、主挂掉之后人工手动故障转移、恢复),sentinel/哨兵模式(自动切换、让哨兵节点进行监控故障的发生和转移,监控+通知+自动故障转移),cluster/集群模式(数据切片、横向扩展、打破单机硬件限制、适合数据量巨大的缓存场景)。
redis cluster vs. replication + sentinal
如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个 G,单机足够了
数据切片,切片算法。范围切片,Hash切片,一致性Hash切片。
一致性hash环:在环上面顺时针访问最近的节点访问。
Redis 缓存淘汰策略、缓存更新、缓存雪崩、缓存击穿、缓存穿透
缓存击穿的化就是缓存中没有,数据库中有这个数据。通常发生在某个缓存过期的时候,此时恰好有大量的并发请求访问这个缓存数据,导致缓存未命中,从而直接请求数据库,造成数据库压力激增。解决办法就是针对特别热点的数据不设置过期时间。
缓存击穿通常是某个特定缓存数据的失效导致的,而缓存雪崩则是大量缓存数据同时失效引起的。
CDN (Content Distribute Network) 内容分发网络:让客户访问就近的服务器站点。
中台策略
整体Web系统分层
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。