“不战而屈人之兵”作为战略指导的思想境界,把全胜作为战争的最高目标,以最小代价达成战争目的。
对项目而言,我们要考虑项目的应用场景,用户规模和数据处理能力,以及项目未来3年的目标等。在应用场景的设计中,会考虑业务和技术的结合度量,业务的规模和流程设计。技术的选型没有涉及到。用户规模和数据处理能力,会考虑技术选型和架构设计。具体要考虑架构设计。架构中重要的核心指标:性能、可用性、伸缩性、扩展性的等架构指标。
一、性能
性能就是核心要素之一,具体如下:
(1)系统前端性能优化:
2.CDN加速
3.反向代理
(2)服务的性能优化:
在高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能,具体如下:
1.分布式缓存(网站性能优化的第一定律:优先考虑使用缓存优化性能)
2.异步化
通过分布式消息队列来实现削峰的目的。通过业务配合技术来解决问题。
3.集群
采用集群也是服务虚拟化的一个体现。用以避免单点问题,同时提供更加高可用,高性能的服务。
4.代码优化
5.存储性能优化
关系型数据库的索引采用B+树进行实现。而很多的nosql数据库则采用了LSM树进行存储。LSM在内存中保留最新增删改查的数据,直到内存无法放下,则与磁盘的下一级LSM树进行merge。所以对于写操作较多,而读操作更多的是查询最近写入数据的场景,其性能远高于b+树;采用HDFS结合map reduce进行海量数据存储和分析。其能自动进行并发访问和冗余备份,具有很高的可靠性。其等于是实现了RAID的功能。
(3)数据访问接口优化:
数据库层其实是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担“能力范围内”的访问请求,所以,我们通过在服务层引入队列和缓存,让最底层的数据库高枕无忧。
(4)网站性能指标
二、高可用性
衡量一个系统架构设计是否满足高可用的目标,就是假设系统中任何一台或者多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用。一般就三个手段、冗余、集群化、分布式。网站高可用的主要手段就是冗余,应用部署在多台服务器上同时提供服务,数据存储在多台服务器上相互备份,任何一台服务器都不会影响应用的整体可以,通常的实现手段即把多台服务器通过负载均衡设备组成一个集群。 安全服务是指计算机网络提供的安全防护措施,包括认证服务、访问控制、数据机密性服务、数据完整性服务和不可否认服务。特定的安全机制是用来实施安全服务的机制,包括加密机制、数据签名机制、访问控制机制、数据完整性机制、认证交换机制、流量填充机制、路由控制机制和公证机制。普遍性的安全机制不是为任何特定的服务而特设的,属于安全管理方面,分为可信功能度、安全标记、事件检测、安全审计跟踪和安全恢复。
三、高扩展性
扩展性(Extensibility)指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。这个没啥好说。扩展性依赖于前期良好的架构设计。合理业务逻辑抽象,水平/垂直切割分布式化等等。网站可扩展架构的主要手段是事件驱动架构和分布式服务。事件驱动通常利用消息队列实现,通过这种方式将消息生产和处理逻辑分隔开。服务器服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增加产品可用通过调用可复用的服务来实现自身的业务逻辑,而对现有产品没有任何影响。
四、高伸缩性
服务尽量同构。DB、cache在考虑分布式时尽量提前设计好扩展方案。也可以采用一些主流的对水平伸缩支持较好的nosql、memcached、hbase等。