有状态的计算:每时每刻都存在一个状态, eg,天猫的成交额每时每刻。
文件和数据库: 关系型数据库存储大量的描述性词语文件。 eg:key, szie, path,
单机服务器的优点:易于维护,没有网络故障,本地保存,
缺点:szie不够大,安全性容错性低,机器挂了,整个服务寄了
应用服务和数据服务分离:分成3个服务器,应用,文件,数据库服务器。
提高了负载能力,和容灾能力。
问题:重复访问的话有重复的请求,都要数据库找path,然后文件服务器进行拼接文件片段返回目的文件。 每次操作都要同样进行,导致速度降低。
因此用到缓存,加快访问速度。 本地缓存和分布式缓存。 前者速度快,容量有限。 后者无限容量。
eg。病毒检测结果也可以存到缓存里,不用重复检测同样的地方。
负载均衡调节器,常用Nginx。
数据库服务器:主从。 从进行读,主进行写,然后主从复制。
CDN,内容分发网络,根据用户地址调配距离最近的服务器提高响应速度。
- transcation driven
事务驱动,eg: 打车软件,外卖软件, 有不同的模块“pay, order。。。”都是跟client进行联系。 两两之间也有rest api等进行联系(用户看不到)
CAP原理:consistent, availability,partition tolerance。
不同服务器中一致性,可获得性,一直有响应, 某台机器挂掉,剩下的机器也能用。
3个之中只能有2个: CP:金融系统,强一致性, A不行因为要所有机器奔跑起来检车一致后才能响应。
AP: 某些机器挂了,可以先提供本地副本,所以牺牲了一致性。eg:买东西:看的时候有库存,但付款发现没有库存,
transaction: 事务性应用,买东西:order,inventory,payment,三则同时成功或者同时失败。
但是缺点是eg: 实时流计算:每秒有很多请求,不同请求,不能完成数据量非常大的应用,无法进行数据聚集(付款方式,付款人名字。。。)。
- event-driven 驱动
是从event log里面,不需要知道很多的信息:姓名,付款方式etc。
现在是event trigger action 来write到log,然后产生其他的application
OLAP: online analytical processing。
eg:8/1 8/30的数据汇总分析。
如果定义状态,每天就可以知道每天的数据分析和任务操作,这样9/1就可以直接方便知道