《软件工程软件工程软件工程 (56).pdf》由会员分享,可在线阅读,更多相关《软件工程软件工程软件工程 (56).pdf(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、WebWeb系统架构设计 系统架构设计 WebWeb的发展带来大量机会 的发展带来大量机会 C/S结构 Client 通用客户端(浏览器/微信/)前端MVC 专用客户端(App)Server HTTP服务器 MVC HTTPHTTP服务器 服务器 REQUEST RESPONSE HTTP协议 一个非常简单的一个非常简单的PythonPython HTTPHTTP服务器 服务器#Codefromhttp:/ RESPONSE BaseHTTPServerBaseHTTPServer和和SimpleH7pRequestHandlerSimpleH7pRequestHandler里都做了什么里都做
2、了什么?接收HTTP请求 简单解析HTTP请求 调用RequestHandler 读入相应的文件或目录内容 写入HTTP响应 BaseHTTPServer SimpleHpRequestHandler 如果业务逻辑复杂,就有必要引入服务器架构 这样开发人员才能更好地关注在业务逻辑的处理上 MVCMVC设计的设计的HTTPHTTP后端服务器 后端服务器 Model View Controller database REQUEST RESPONSE router 与数据库交互 存、取相关数据 实现业务逻辑 给客户端以响应 追求便利,常常在此渲染模板 前后端发生了耦合!RESTfulRESTful
3、APIAPI 由于前端的发展,已经很有必要把前端模板从后端服务器上剥离出来 这样,后端可以专注于业务逻辑 GET/acGvity/listGET/Gcket?id=abcdefgPOST/acGvityPUT/acGvityDELETE/acGvity 可以用JSON格式作为RESPONSE的Content-Type Content比如可以是code:0,message:,data:name:party,Gcket_count:100 RESTfulRESTful APIAPI -前后端通信 前后端通信 Web页面 App等专用客户端 Ajax 发起HTTP请求 不同的端口不同的端口?跨域跨域
4、?对Web页面而言,前端和后端是不是需要两个不同的端口来同时提供服务?是不是会有Ajax跨域无法请求的问题?REQUEST RESPONSE 80端口 RESTful 后端1 前端文件 8123端口 管道文件 RESTful 后端2 异步任务 异步任务 我们知道,HTTP请求是同步的 也就是说,HTTP请求在服务器上响应之后,就不该做别的事了 但有些时候,我们不得已而为之(想想看,什么场景下?)此外,HTTP请求有超时限制(取决于浏览器)所以,我们在这些时候需要执行一些异步的任务 REQUEST RESPONSE TASKMANAGER TASK task_id 请求任务 启动任务 TIMER
5、 请求任务 异步任务的实现方式 异步任务的实现方式 定时任务 异步任务 操作系统定时任务/异步任务队列 cronjob/celery celery Node.JS可以借助其异步的特点自行实现,但极不推荐 自己实现的往往难以管理,而且容易出错 异步任务队列为系统规模化提升带来的增益 异步任务队列为系统规模化提升带来的增益 通过分布式的任务队列,可以借助集群的力量,以很快的速度消化掉大量异步任务 最困难的往往是0到1,而不是1到10 高性能高性能、高稳定性的服务 高稳定性的服务 为了追求系统的更高性能 我们应该充分利用缓存思想 借助缓存提高借助缓存提高WebWeb访问的速度 访问的速度 内存型数据
6、库往往比传统数据库简单不少,比如redis、memcached都是典型的Key-Value键值对存储 它们的一个用途就是作为缓存使用 比如,假设我们发现 GET/acGvity 这个API的访问平均耗时要500ms左右 但这个API大多数情况下返回的都是相同的结果 就可以将它的RESPONSE存入redis 再次访问,直接从redis取结果,平均耗时降低至100ms以内 需要注意缓存的过期机制(比如修改了acGvity的信息后缓存过期)或者在一些对实时性要求不那么高的场景下,可以给缓存设置固定的过期时间 回顾一下 回顾一下 想一想,抢票的架构该如何设计,才能在保证正确性的前提下尽可能榨干服务器的全部性能?谢谢大家谢谢大家!THANKS