intuitive understanding of backend dev

38
关于后端的些事情 Intuitive Understanding of Backend Dev @果壳 2016.01.07

Upload: justin-li

Post on 21-Jan-2017

140 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: Intuitive understanding of backend dev

关于后端的⼀一些事情Intuitive Understanding of Backend Dev

⼩小拿@果壳2016.01.07

Page 2: Intuitive understanding of backend dev
Page 3: Intuitive understanding of backend dev

切⼊入点

⼀一、在做什么——解决什么问题 ⼆二、要怎么做——如何解决问题

Python、MySQL、ORM、MVC、RESTful、API、Shell、HTTP、TCP/IP、算法、

MongoDB、Flask、Socket、多线程、Docker、Vim......

Page 4: Intuitive understanding of backend dev

⼀一、做什么

Page 5: Intuitive understanding of backend dev

前提

Page 6: Intuitive understanding of backend dev

语⾔言——个体的知识与经验积累

信息

Page 7: Intuitive understanding of backend dev

⽂文字、印刷术、书籍——持久保存、跨越时间与空间的限制

信息

Page 8: Intuitive understanding of backend dev

互联⺴⽹网——极⼤大地提⾼高了知识保存和获取的效率

信息

时间维度

空间维度

获取效率

Page 9: Intuitive understanding of backend dev

互联⺴⽹网是什么

后端做什么:在互联⺴⽹网范围,实现信息⾼高效的存储与获取

⼤大脑延伸(⼈人——知识)

新的维度(⼈人——⼈人)

信息⾰革命的载体

Page 10: Intuitive understanding of backend dev

⼆二、怎么做

Page 11: Intuitive understanding of backend dev

三层结构

系统架构

编程

语⾔言⼯工具

设计图

施⼯工

建筑材料

Web系统 建筑⼯工程

实体

过程

思想

Page 12: Intuitive understanding of backend dev

编程

• 什么是程序

• 什么是编程

Page 13: Intuitive understanding of backend dev

程序是实体

程序 = 算法 + 数据结构

Page 14: Intuitive understanding of backend dev

类⽐比

拼乐⾼高 = 图纸 + 积⽊木

写程序 = 算法 + 数据结构

Page 15: Intuitive understanding of backend dev

编程是过程

Page 16: Intuitive understanding of backend dev

⽰示例

排序 5,3,12,8,1,9

1,3,5,8,9,12

某个过程

Page 17: Intuitive understanding of backend dev

系统架构• 特点

• ⺫⽬目标

• 模式

• ⽰示例

• 业务与权衡

Page 18: Intuitive understanding of backend dev

• ⾼高并发、⼤大流量

• ⾼高可⽤用

• 海量数据

• ⽤用户分布⼲⼴广泛、⺴⽹网络情况复杂

• 需求快速变更、版本发布频繁

• 渐进式发展

特点

Page 19: Intuitive understanding of backend dev

• 性能

• 可⽤用性(99.99%)

• 伸缩性

• 扩展性

• 安全性

⺫⽬目标

Page 20: Intuitive understanding of backend dev

• 分层

• 分割

• 分布式

• 集群

• 缓存

• 异步

• 冗余

模式

Page 21: Intuitive understanding of backend dev

⺴⽹网站架构演化

初始阶段

Page 22: Intuitive understanding of backend dev

⺴⽹网站架构演化

应⽤用服务和数据服务分离

Page 23: Intuitive understanding of backend dev

⺴⽹网站架构演化

加缓存

Page 24: Intuitive understanding of backend dev

⺴⽹网站架构演化

使⽤用应⽤用服务器集群改善⺴⽹网站的并发处理能⼒力

Page 25: Intuitive understanding of backend dev

⺴⽹网站架构演化

数据库读写分离

Page 26: Intuitive understanding of backend dev

⺴⽹网站架构演化

使⽤用反向代理和CDN

Page 27: Intuitive understanding of backend dev

⺴⽹网站架构演化

使⽤用分布式⽂文件系统和分布式数据库系统

Page 28: Intuitive understanding of backend dev

⺴⽹网站架构演化

使⽤用NoSQL和搜索引擎

Page 29: Intuitive understanding of backend dev

⺴⽹网站架构演化

业务拆分

Page 30: Intuitive understanding of backend dev

业务与权衡

分布式酒店预订系统

Page 31: Intuitive understanding of backend dev

语⾔言与⼯工具

• 后端技术栈

• 基于Python的Web技术栈

• 职位描述

Page 32: Intuitive understanding of backend dev

技术栈• 语⾔言:C/C++/Python/PHP…

• ⺴⽹网络:TCP/IP/HTTP/socket/select/epoll/ …

• Linux:Shell/Vim/gcc/makefile/进程线程/IPC …

• Web服务器:Apache/Nginx …

• 数据存储:Mysql/Redis/Memcache/MongoDB …

• 质量控制:编码规范/单元测试/版本控制 …

• … …

Page 33: Intuitive understanding of backend dev

Python的Web技术栈

Page 34: Intuitive understanding of backend dev

职位描述(C++)

Page 35: Intuitive understanding of backend dev

职位描述(Python)

Page 36: Intuitive understanding of backend dev

三、区别

Page 37: Intuitive understanding of backend dev

区别移动端 前端 后端

交互流程对象 ⽤用户 ⽤用户 数据

⽣生命周期 使⽤用⼀一次APP 使⽤用⼀一次Web ⼀一直运⾏行

运⾏行主体 ⽤用户端(⼿手机) ⽤用户端(PC) 服务器

⽤用户规模与程序复杂度 的关系

基本⽆无关 基本⽆无关 线性相关(乐观情况)

Page 38: Intuitive understanding of backend dev

END