web系统设计经验分享

325 阅读3分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

作为一名有着多年web开发经验的程序员,对这一块领域有了很多沉淀,分享一下在做web系统开发时的经验。

常用框架

web应用对于编程语言的容忍度较高,接口耗时主要在网络IO,不同语言都有合适的web框架可以使用,如

  • PHP:ThinkPHP
  • Python:Django,Flask,Sanic
  • Java:SpringBoot
  • Go:gin,beego

业务建模

做web系统设计时,我常常采用自下而上的思维去思考,先去分析业务建模,从中找出实体,并且理清楚之间的关联关系,比如一对一,多对多,一对多等。可以采用一种领域驱动设计的理念,虽然程序员是做技术,但是对业务的了解深入程度,也能帮助其更好地进行业务建模。

数据库选型

通常来讲,数据库使用最广泛的是关系型数据库,比如MySQL,PostgreSQL,但有时为了特殊需要,也会引入NoSQL,比如MongoDB、Redis。

关系型数据库的好处是可以很好地体现业务建模,并能做关联查询。一个数据量和并发量不大的web系统,使用关系型数据库绰绰有余。

而非关系型数据库可以支持特殊的一些存储,并可以更方面地做扩展。

缓存和消息队列

如果说程序=数据结构+算法。那么做系统设计=程序+存储。

通常一个web请求进来,经过后端的应用程序,然后对数据库进行CURD等操作,并把数据返回,这是它的通常的生命周期。

但是数据库的QPS优先,我们就要引入缓存。缓存又可分为本地缓存、分布式缓存等等。

同时面对一些特殊场景,我们还需要消息队列。消息队列的三个作用:异步、解耦、削峰填谷。

API设计

目前的项目基本都是前后端分离,前后端的API交互通常采用Restful风格API+json形式。

在设计API时,要遵从标准的Restful风格的API设计,包括url的风格以及HTTP的请求方法语义。

前端

后端语言多,但是实践方法论比较通用。

前端恰恰相反,语言比较少(html+css+js),但是经常为了要去适配不同的客户端,而变得非常复杂。

目前主流的前端框架是Vue和React。

web安全

web安全主要考虑sql注入,XSS攻击、CSRF攻击。

从单体到分布式

随着业务量的扩展,往往单体项目难以支撑很高的业务量,这时候就要进行微服务改造。

微服务改造过程中,也引入了新的问题,比如服务治理,RPC调用、分布式追踪等等。

这些在业内也都有一些主流的思路,比如Java的spring cloud全家桶。

总结一下,市场上大部分的程序员都是业务开发,重复写CURD,我觉得如何让自己能脱颖而出,一方面就是能够对负责的系统有比较深厚的理解,遇到问题能快速定位,体现价值。另一方面就是在遇到复杂问题时,能够有好的技术解决方案去解决,这离不开平时的大量积累,养兵千日用兵一时。