基本网站架构 网络编程基础

整理一些网络编程的基础知识。摘录一下方便理理解。

基本服务器

  • 就是一个服务器,蕴含数据库了。

数据库分离

  • web server 和 database server,client 请求 web server
  • web server 请求 database server 完成 OLTP (online transaction processing,增删改查等事务)或者 OLAP (online analytical ,分析处理)活。

web server 动静分离

  • 动态请求比如 http 网页的静态内容,html 文件,纯 js。
  • 动态请求涉及数据库在线即时查询,cgi实时应用 php 动态网页,jsp 动态网页。
  • 可以简单的理解,静态是每次请求都是一样的内容,而动态涉及 get 和 post 或者实时由服务器生成的内容(比如cgi生成html,这是动态的)。

缓存

  • 有了动静分离之后,就可以分层缓存了,由于动态的内容(对应 volatile,强制每次都从内存取)不适合缓存,所以就不缓存了,但是静态的可以(放寄存器,放 Cache)。实际所有都可以缓存。
  • 浏览器缓存,直接缓存用户刚刚访问又关掉的内容。
  • 前端缓存(比如 squid 就是缓存代理。我们之前讲代理的时候,讲到 squid 是代理,但是不涉及加密的代理一般可以用来做缓存,什么中间人攻击)。减少对服务器的访问。
  • ESI edge side includes 缓存,这个是动态缓存,esi 是用来标记片段的技术,然后缓存根据esi 标记来决定是能缓存的还是必须实时计算的。
  • Local data cache,这个是针对数据库服务器的缓存,这一点很好理解,访问 web 服务器要缓存一层,web 服务器访问 database 也缓存一层,减轻数据库服务器压力。

集群与读写分离

  • 一个服务器难抗压,绷不住,所以用很多服务器,这样就由前面说的 fronted page cache(一般是 cdn 用像 squid 的 proxy 技术实现)来进行 load balance 再到具体哪台服务器。
  • 读写分离则是一路到了必须访问 database 的时候,将 db 服务器分为 read 和 write 的,通过 dal data access layer 来读写分离,这里涉及 master server(for write)和 slave server (for read),分布式系统的 write 要 replicate 到 slave。
  • cap 原则,consitency(强一致和最终一致), availiability(实时返回) 和 partition tolerance,p的意思是如果图分为几个子图,系统能否正常工作。(@see) 只能三选二,证明是反证法。

负载均衡(@see

  • 用 DNS 负载均衡,直接对应多个机子。必须对等的多态服务器才能均衡。
  • 反向代理实现内网转发,调度方法灵活一点,nginx 负载均衡即对 http 的负载均衡。
  • linux vitual server 负载均衡,在 tcp/ip 层上实现负载均衡,netfilter,根据 ip + port 来转发。需要的原因是适配各种算法,工作在内核上稳定性能。
  • f5 硬件负载均衡,通过交换机实现,灵活更大,对端来说透明(性能更好),类似一个包过滤器的意思?
  • 以上内容都使用与 web server 和 db server。

CDN + 分布式缓存 + 分库分表

  • 结合上述内容的网络架构。
  • 首先是地区 CDN 实现前端的负债均衡调度给集群中的服务器。
  • Data Cache 也做成分布式的,数据库也分库分表提高并发性能。
  • 分布式缓存比如 memcached,membase,redis 这些 KV 类似的(nosql)从而避免直接对 db 的查询。而 nosql 的 kv 只需要处理 expire 后 evict 和 reload,很快的读性能。
  • 分库是垂直上(分 column 存储)把不同的数据分到不同的服务器取。
  • 分表是水平上的(shard,将 rows partition 存储)

分布式文件系统

  • 继续优化 DAL 之前,通过抽象一个 DFS (分布文件系统)来透明下层的 CAP 处理事宜。使用分布式文件系统时,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据。
  • 谷歌三宝:gfs,bigtable,mapreduce。
  • mapreduce 是基于谷歌 gfs,bigtable 论文的一个抽象。mapreduce 是基于 DFS 上的大数据框架。map 和 reduce 在之前学 sicp lisp 的时候(或者js,python fp 等时候)学过了,就是那个差不多的意思(谷歌论文:Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages)。map 是对集群里每个分布式节点 map 某个操作,之后 reduce 则是合成这些结果输出。
  • hadoop 则是 mapreduce 的一个实现。
  • bigtable 是谷歌的一个分布式kv数据库技术,pb级海量数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值