读书笔记-互联网创业核心技术(构建可伸缩的Web应用)

1 核心概念,单一服务器到更强的服务器

垂直伸缩

  • 通过使用RAID增加I/O吞吐能力
  • 通过切换SSD改善I/O访问速度
  • 通过增加内存减少I/O操作(意味着文件系统有更多的缓存空间,应用程序有更多的工作内存)
  • 通过升级/增加网络接口提高网络吞吐能力
  • 更新服务器获得更多处理器或者更多虚拟核
  • 主要制约:成本,当越过某个点后,垂直伸缩会变得格外昂贵;CPU速度;每台服务器的虚拟核数目;硬盘速度。

服务分离

  • 不同的物理机上安装不同的服务类型,比如FTP,DNS,缓存,等。
  • 功能分割:将整个Web应用切分成一组不同的功能模块,将他们独立部署。

内容分发网络(CDN)

CDN 缓存静态文件。用户将从最近的CDN服务器获取静态内容,进而加速页面加载时间。

分散访问流量:水平伸缩

通过增加服务器提升计算能力。

服务全球用户的伸缩性架构。

  • 使用GeoDNS服务:基于客户地理位置进行ip地址解析的DNS服务。用户会访问到离他最近的一个Web服务器,将网络延迟减到最小。
  • 边缘缓存(edge-cache)服务器:边缘缓存是一种距离用户较劲的HTTP缓存服务器,便于部分缓存用户的HTTP流量。

分层架构

  • 将不同功能划分到不同层次的架构。
  • 低层的组件暴露一组API给高层组件调用。
  • 每一层都消费其低层提供的服务,但是低层永远不会消费上层提供的服务。
  • 分层可以强制结构化并减少耦合,低层组件变得更简单和系统。越底层稳定性越强。

支持技术

  • Web周边,通常用一些第三方软件技术实现,比如消息队列,应用缓存,主数据存储,搜索引擎等。
  • 这些应该是一种即插即用的扩展组件,保证在组件进行更换时,整个架构不受影响。

2 软件设计原则

简单

简化从以下四个基本步骤进行

隐藏复杂与构建抽象

  • 系统很庞大时是无法保持整体简单的,能做的只是保持局部简单。
  • 达到局部简单,最主要的方式是确保任何单个的类/模块/应用的设计目标及工作原理都能被快速理解。
  • 好的设计原则是类之间的依赖关系尽量少。
  • 在庞大复杂的系统中,当创建一个独立的服务时,需要添加一个抽象层,所有的功能层都在这些抽象层基础上去实现,从而隐藏功能层的复杂性。

避免过度设计

  • 好的设计方法是可以在后期逐渐添加新的功能和特性,而不是一开始就开发一个超级大的系统。
  • 早期构建一个合理的抽象层次,然后迭代的增加新特性。

尝试测试驱动开发(TDD)

  • 先写测试代码,然后写功能实现代码。
  • 有助于工程师可以更好地把握工作重点,从用户视角看待问题,使开发的接口更简单清晰。

从软件设计的简化范例中学习

低耦合

  • 低耦合可以保证复杂性局部化。
  • 来更高层面上进行结构,意味着将系统分成多个应用,每个应用都只关注相对较小的一部分功能。这样每个应用就可以按需分别伸缩。
  • 促进低耦合:要在较高的抽象层面降低耦合度,需要让系统不同的部分接触面尽量少。
  • 避免不必要的耦合:一般来说,画系统架构设计图很容易暴露循环依赖,所以在设计阶段一定要画架构图。一个良好设计的模块儿叫扣图,看起来像一棵树,而不像一个社交网络图。
  • 低耦合范式:一个很好的低耦合设计例子是UNIX命令行编程及管道pipe用法。

不用重复自己

基于约定编程。

画架构图

  • 用例图:不考虑技术方案,仅仅关注业务需求,可以将功能特性和业务需求提炼出来。
  • 类图:展现独立模块的结构。一个典型的类图包含接口,类,关键方法名,以及他们的关系。依赖可以用一条线来表示,所以从类图上可以很容易的看出耦合关系。
  • 模块图&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值