浅谈软件架构设计

软件架构介绍

架构定义:
软件架构不仅仅注重软件本身的结构和行为, 还注重其他特性:使用, 功能性, 性能, 弹性, 重用, 可理解性, 经济和技术的限制及权衡。
软件架构的目标:
    []可延伸性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展;[/][]可维护性(Maintainable)。软件系统的维护包括两方面:1、排除现有的错误;2、将新的软件需求反映到现有系统中去,一个易于维护的系统可以有效地降低技术支持的花费。[/][]客户体验(Customer Experience)。软件系统必须易于使用。[/][]市场时机(Time to Market)。软件用户[/]
 软件逻辑架构:
逻辑架构:软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件,等等
软件系统的逻辑架构图:[attach]813[/attach] 软件物理架构:
物理架构:软件元件是怎样放到硬件上的?
软件系统的物理架构图[attach]814[/attach]

物联网架构的演变

单机(One Box)简单web应用:
    []访问量小[/][]Apache/PHP/MySQL 在同一主机上[/][]瓶颈[/]
                 1、通常先出现在数据库,然后才是Apache/php                 2、硬盘 I/O (Innodb) 或MyISAM锁等待[attach]815[/attach] 双机(Two Box)
    []访问量逐渐增大[/][]Apache/PHP在Server A;MySQL在Server B[/][]瓶颈[/]
                 1、硬盘 I/O (Innodb) 或MyISAM锁等待                 2、网络I/O[attach]816[/attach] 多机 (Many Boxes with Replication)
    []访问量继续增大[/][]MySQL主从复制及读写分离 (master 负责IN/UP/DEL, slave负责 SELECT)[/][]SELECT, IN/UP/DEL可以在应用程序内指定访问不同服务器 (如使用不同的handle或Db Adapter)[/][]WEB Server可能需要使用负载均衡[/][]NoSQL/Cache/CDN[/]
[attach]817[/attach] 系统分层:[attach]818[/attach]Cache Tier
Memcached、Redis等广泛使用。
[attach]819[/attach]架构新问题Mysql:[list=1][]Slave Lag 每台Slave数据完全一样。有的忙,有的闲[/][]数据量越来越大,单表过大,查询效率太低;[/]综合1.2 通常采用
    []memcached数据缓存 [/][]MySQL水平扩展(库表拆分)[/]
Web Server 负载过高 
    []提高PHP代码执行效率 Opcode Cache[/][]静态文件缓存  Squid/Varnish / CDN[/][]负载均衡[/]
[attach]820[/attach] 新架构目标:
    []高可用[/][]高性能 [/][]可扩展 [/][]监控[/][]成本控制[/]

分布式系统架构

分布式系统概念
What is a Distributed System?“一个分布式系统是若干个独立的计算机的集合,但是对该系统的用户来说,系统就像一台计算机一样。”
两方面的含义:[list=1][]硬件方面:各个计算机都是自治的 [/][]软件方面:用户将整个系统看作是一台计算机 [/]  分布式系统定义:
一个分布式系统组织成中间件形式,中间件层分布在多台机器上。
[attach]821[/attach]分布式系统优点:[attach]822[/attach]分布式操作系统特点:[attach]823[/attach] 网络操作系统(NOS)网络操作系统的一般结构:[attach]824[/attach]分布式系统中设计的关键问题:透明性(对用户、程序)[attach]825[/attach]灵活性[attach]826[/attach]单内核基本上是目前的集中式操作系统,增加了网络功能和远程服务集合。 微内核的四种基本服务:        (1)进程间通信机制        (2)少量内存管理功能        (3)必要的低层进程管理和调度        (4)低层输入/输出服务可靠性[attach]827[/attach]性能[attach]828[/attach]可伸缩性(scalability)避免:
    []集中式硬件[/][]集中式算法[/][]集中式的数据结构[/]
 [attach]829[/attach]可扩展性
    []没有一台机器上存放着关于系统状态的全部信息[/][]机器只是基于本地信息做出决定[/][]一个机器出故障不会破坏算法[/][]不一定存在全局时钟。[/]
可扩展性示例: [attach]830[/attach]

总结

没有固定的架构,架构都是随着时间和业务的迁徙和变动而发生改变和重构的。所以架构不是一成不变的,也不是淘宝的架构就是万能的,适应你们业务的架构演变的架构就是最优架构。万变不离其宗,但是其底层技术实现和方法是可以借鉴采用大公司场景做法。

0 个评论

要回复文章请先登录注册