Ethan's Blog


  • Home

  • Archives

  • Tags

  • Search

设计模式学习导读

Posted on 2020-08-20

如果说数据结构和算法是教你如何写出高效代码,那设计模式讲的是如何写出可扩展、可读、可维护的高质量代码。

优秀的开源项目、框架、中间件,代码量、类的个数都会比较多,类结构、类之间的关系极其复杂,常常调用来调用去。所以,为了保证代码的扩展性、灵活性、可维护性等,代码中会使用到很多设计模式、设计原则或者设计思想。如果你不懂这些设计模式、原则、思想,在看代码的时候,你可能就会琢磨不透作者的设计思路,对于一些很明显的设计思路,你可能要花费很多时间才能参悟。相反,如果你对设计模式、原则、思想非常了解,一眼就能参透作者的设计思路、设计初衷,很快就可以把脑容量释放出来,重点思考其他问题,代码读起来就会变得轻松了。

代码质量评价标准

仔细看前面罗列的所有代码质量评价标准,你会发现,有些词语过于笼统、抽象,比较偏向对于整体的描述,比如优雅、好、坏、整洁、清晰等;有些过于细节、偏重方法论,比如模块化、高内聚低耦合、文档详尽、分层清晰等;有些可能并不仅仅局限于编码,跟架构设计等也有关系,比如可伸缩性、可用性、稳定性等。要写出满足这些评价标准的高质量代码,我们需要掌握一些更加细化、更加能落地的编程方法论,包括面向对象设计思想、设计原则、设计模式、编程规范、重构技巧等。而所有这些编程方法论的最终目的都是为了编写出高质量的代码。

Read more »

缓存

Posted on 2020-01-26

Cache 可以提高页面加载速度,并可以减少服务器和数据库的负载。在这个模型中,Dispatcher 先查看请求之前是否被响应过,如果有则将之前的结果直接返回,来省去真正的处理。

数据库因分区(Partition)读写而获益,但是热数据会导致读写不均,造成瓶颈。如果在数据库前加个缓存,就会减轻不均匀的负载和突发流量对数据库的影响。

Read more »

异步与通讯

Posted on 2020-01-17

异步(Asynchronism)

异步工作流有助于减少那些原本顺序执行的请求时间。它们可以通过提前进行一些耗时的工作来帮助减少请求时间,比如定期汇总数据。

消息队列

消息队列接收、保留和传递消息。如果按顺序执行操作太慢的话,你可以使用有以下工作流的消息队列:

  • 应用程序将作业发布到队列,然后通知用户作业状态;
  • 一个 worker 从队列中取出该作业,对其进行处理,然后显示该作业完成;

不去阻塞用户操作,作业在后台处理。在此期间,客户端可能会进行一些处理使得任务看上去像是已经完成了。例如,如果要发送一条推文,推文可能会马上出现在你的时间线上,但是可能需要一些时间才能将你的推文推送到你的所有关注者那里去。

Redis 是一个令人满意的简单的消息代理,但是消息有可能会丢失。

RabbitMQ 很受欢迎但是要求你适应 AMQP 协议,并且管理你自己的节点。

Amazon SQS 是被托管的,但可能具有高延迟,并且消息可能会被传送两次。

Read more »

数据库

Posted on 2020-01-15

关系型数据库管理系统(RDBMS)

像 SQL 这样的关系型数据库,是一系列以表的形式组织的数据项集合。

ACID 用来描述关系型数据库事务的特性:

  • 原子性(Atomicity):每个事务内部所有操作要么全部完成,要么全部不完成;
  • 一致性(Consistency):任何事务都使数据库从一个有效的状态转换到另一个有效状态;
  • 隔离性(Isolation):并发执行事务的结果与顺序执行事务的结果相同;
  • 持久性(Durability):事务提交后,对系统的影响是永久的。

关系型数据库的扩展,包括许多技术:主-从复制、主-主复制、联邦、分片、非规范化和 SQL 调优。

主-从复制

主库同时负责读取和写入操作,并复制写入到一个或多个从库中,从库只负责读操作。树状形式的从库再将写入复制到更多的从库中去。如果主库离线,系统可以以只读模式运行,直到某个从库被提升为主库或有新的主库出现:

Read more »

反向代理与应用层

Posted on 2019-12-28

反向代理

Reverse Proxy 是一种可以集中调用内部服务,并提供统一公共接口的 Web 服务器。来自客户端的请求先被反向代理服务器转发到可响应请求的服务器,然后再把服务器的响应结果返回给客户端。

带来的好处包括:

  • 增加安全性:隐藏后端服务器的信息,屏蔽黑名单中的 IP,限制每个客户端的连接数;
  • 提高可扩展性和灵活性:客户端只能看到反向代理服务器的 IP,这使你可以增减服务器或修改它们的配置;
  • SSL 终结:解密传入的请求并加密服务器响应,这样的话后端服务器就不必再执行这些潜在高消耗运算了(不需要再每台服务器上安装 X.509);
  • 压缩:压缩服务器响应;
  • 缓存:直接返回命中的缓存结果;
  • 静态内容:直接提供静态内容(HTML/CSS/JS、图片、视频等)。

反向代理与负载均衡

  • 当你有多个服务器时,部署负载均衡器非常有用。通常,负载均衡器将流量路由给一组功能相同的服务器上;
  • 即使只有一台 Web 服务器或应用服务器时,反向代理也同样有用;
  • Nginx 和 HAProxy 等解决方案,可以同时支持七层反向代理和负载均衡。
Read more »
1…414243…55
necusjz

necusjz

271 posts
16 tags
© 2016 - 2026 necusjz
Powered by Hexo
Theme - NexT.Mist