加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

云分析和远程监控是自动化的下一个趋势?

发布时间:2021-02-20 18:03:22 所属栏目:动态 来源:互联网
导读:然而,当NoSQL兴起,大家突然发现,其实很多互联网业务,其数据格式是如此的简单,很多时候根部不需要关系型数据库那种复杂的表格。对于索引的要求往往也只是根据主索引搜索。而更复杂的全文搜索,本身数据库也做不到。所以现在相当多的高并发的互联网业务,

然而,当NoSQL兴起,大家突然发现,其实很多互联网业务,其数据格式是如此的简单,很多时候根部不需要关系型数据库那种复杂的表格。对于索引的要求往往也只是根据主索引搜索。而更复杂的全文搜索,本身数据库也做不到。所以现在相当多的高并发的互联网业务,首选NoSQL来做存储设施。最早的NoSQL数据库有MangoDB等,现在最流行的似乎就是Redis了。甚至有些团队,把Redis也当成缓冲系统的一部分,实际上也是认可Redis的性能优势。

NoSQL除了更快、承载量更大以外,更重要的特点是,这种数据存储方式,只能按照一条索引来检索和写入。这样的需求约束,带来了分布上的好处,我们可以按这条主索引,来定义数据存放的进程(服务器)。这样一个数据库的数据,就能很方便的存放在不同的服务器上。在分布式系统的必然趋势下,数据存储层终于也找到了分布的方法。

分布式系统在可管理性上造成的问题 分布式系统并不是简单的把一堆服务器一起运行起来就能满足需求的。对比单机或少量服务器的集群,有一些特别需要解决的问题等待着我们。

硬件故障率

所谓分布式系统,肯定就不是只有一台服务器。假设一台服务器的平均故障时间是1%,那么当你有100台服务器的时候,那就几乎总有一台是在故障的。虽然这个比方不一定很准确,但是,当你的系统所涉及的硬件越来越多,硬件的故障也会从偶然事件变成一个必然事件。一般我们在写功能代码的时候,是不会考虑到硬件故障的时候应该怎么办的。而如果在编写分布式系统的时候,就一定需要面对这个问题了。否则,很可能只有一台服务器出故障,整个数百台服务器的集群都工作不正常了。


 

然而Memcache本身是一个独立的服务器进程,这个进程自身并不带特别的集群功能。也就是说这些Memcache进程,并不能直接组建成一个统一的集群。如果一个Memcache不够用,我们就要手工用代码去分配,哪些数据应该去哪个Memcache进程。——这对于真正的大型分布式网站来说,管理一个这样的缓冲系统,是一个很繁琐的工作。

因此人们开始考虑设计一些更高效的缓冲系统:从性能上来说,Memcache的每笔请求,都要经过网络传输,才能去拉取内存中的数据。这无疑是有一点浪费的,因为请求者本身的内存,也是可以存放数据的。——这就是促成了很多利用请求方内存的缓冲算法和技术,其中最简单的就是使用LRU算法,把数据放在一个哈希表结构的堆内存中。

而Memcache的不具备集群功能,也是一个用户的痛点。于是很多人开始设计,如何让数据缓存分不到不同的机器上。最简单的思路是所谓读写分离,也就是缓存每次写,都写到多个缓冲进程上记录,而读则可以随机读任何一个进程。在业务数据有明显的读写不平衡差距上,效果是非常好的。

然而,并不是所有的业务都能简单的用读写分离来解决问题,比如一些在线互动的互联网业务,比如社区、游戏。这些业务的数据读写频率并没很大的差异,而且也要求很高的延迟。因此人们又再想办法,把本地内存和远端进程的内存缓存结合起来使用,让数据具备两级缓存。同时,一个数据不在同时的复制存在所有的缓存进程上,而是按一定规律分布在多个进程上。——这种分布规律使用的算法,最流行的就是所谓“一致性哈希”。这种算法的好处是,当某一个进程失效挂掉,不需要把整个集群中所有的缓存数据,都重新修改一次位置。你可以想象一下,如果我们的数据缓存分布,是用简单的以数据的ID对进程数取模,那么一旦进程数变化,每个数据存放的进程位置都可能变化,这对于服务器的故障容忍是不利的。

Orcale公司旗下有一款叫Coherence的产品,是在缓存系统上设计比较好的。这个产品是一个商业产品,支持利用本地内存缓存和远程进程缓存协作。集群进程是完全自管理的,还支持在数据缓存所在进程,进行用户定义的计算(处理器功能),这就不仅仅是缓存了,还是一个分布式的计算系统。


 

缓冲技术

在互联网服务中,大部分的用户交互,都是需要立刻返回结果的,所以对于延迟有一定的要求。而类似网络游戏之类服务,延迟更是要求缩短到几十毫秒以内。所以为了降低延迟,缓冲是互联网服务中最常见的技术之一。

早期的WEB系统中,如果每个HTTP请求的处理,都去数据库(MySQL)读写一次,那么数据库很快就会因为连接数占满而停止响应。因为一般的数据库,支持的连接数都只有几百,而WEB的应用的并发请求,轻松能到几千。这也是很多设计不良的网站人一多就卡死的最直接原因。为了尽量减少对数据库的连接和访问,人们设计了很多缓冲系统——把从数据库中查询的结果存放到更快的设施上,如果没有相关联的修改,就直接从这里读。

最典型的WEB应用缓冲系统是Memcache。由于PHP本身的线程结构,是不带状态的。早期PHP本身甚至连操作“堆”内存的方法都没有,所以那些持久的状态,就一定要存放到另外一个进程里。而Memcache就是一个简单可靠的存放临时状态的开源软件。很多PHP应用现在的处理逻辑,都是先从数据库读取数据,然后写入Memcache;当下次请求来的时候,先尝试从Memcache里面读取数据,这样就有可能大大减少对数据库的访问。



(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读