当前位置: 首页 > news >正文 功能网站建设多少钱培训学做网站要多久 news 2025/10/23 18:54:08 功能网站建设多少钱,培训学做网站要多久,wordpress上传图片时发生了错误,wordpress读者墙1、前言 随着互联网从简单的单向浏览请求#xff0c;发展为基于用户个性信息的定制化以及社交化的请求#xff0c;这要求产品需要做到以用户和关系为基础#xff0c;对海量数据进行分析和计算。对于后端服务来说#xff0c;意味着用户的每次请求都需要查询用户的个人信息和…1、前言 随着互联网从简单的单向浏览请求发展为基于用户个性信息的定制化以及社交化的请求这要求产品需要做到以用户和关系为基础对海量数据进行分析和计算。对于后端服务来说意味着用户的每次请求都需要查询用户的个人信息和大量的关系信息此外大部分场景还需要对上述信息进行聚合、过滤、排序最终才能返回给用户。 CPU 是信息处理、程序运行的最终执行单元如果它的世界也有 “秒” 的概念假设它的时钟跳一下为一秒那么在 CPUCPU 的一个核心眼中的时间概念是什么样的呢 可见 I/O 的速度与 CPU 和内存相比是要差几个数量级的如果数据全部从数据库获取一次请求涉及多次数据库操作会大大增加响应时间无法提供好的用户体验。 对于大型高并发场景下的 Web 应用缓存更为重要更高的缓存命中率就意味着更好的性能。缓存系统的引入是提升系统响应时延、提升用户体验的唯一途径良好的缓存架构设计也是高并发系统的基石。 缓存的思想基于以下几点 时间局限性原理 程序有在一段时间内多次访问同一个数据块的倾向。例如一个热门的商品或者一个热门的新闻会被数以百万甚至千万的更多用户查看。通过缓存可以高效地重用之前检索或计算的数据。 以空间换取时间 对于大部分系统全量数据通常存储在 MySQL 或者 Hbase但是它们的访问效率太低。所以会开辟一个高速的访问空间来加速访问过程例如 Redis 读的速度是 110000 次 /s写的速度是 81000 次 /s 。 性能和成本的 Tradeoff 高速的访问空间带来的是成本的提升在系统设计时要兼顾性能和成本。例如在相同成本的情况下SSD 硬盘容量会比内存大 1030 倍以上但读写延迟却高 50100 倍。 引入缓存会给系统带来以下优势 提升请求性能 降低网络拥塞 减轻服务负载 增强可扩展性 同样的引入缓存也会带来以下劣势 毫无疑问会增加系统的复杂性开发复杂性和运维复杂性成倍提升。 高速的访问空间会比数据库存储的成本高。 由于一份数据同时存在缓存和数据库中甚至缓存内部也会有多个数据副本多份数据就会存在数据双写的不一致问题同时缓存体系本身也会存在可用性问题和分区的问题。 在缓存系统的设计架构中还有很多坑很多的明枪暗箭如果设计不当会导致很多严重的后果。设计不当轻则请求变慢、性能降低重则会数据不一致、系统可用性降低甚至会导致缓存雪崩整个系统无法对外提供服务。 2、缓存的主要存储模式 三种模式各有优劣适用于不同的业务场景不存在最佳模式。 ● Cache Aside旁路缓存 写 更新 db 时删除缓存当下次读取数据库时驱动缓存的更新。 读 读的时候先读缓存缓存未命中那么就读数据库并且将数据回种到缓存同时返回相应结果 特点懒加载思想以数据库中的数据为准。在稍微复杂点的缓存场景缓存都不简单是数据库中直接取出来的可能还需要从其他表查询一些数据然后进行一些复杂的运算才能最终计算出值。这种存储模式适合于对数据一致性要求比较高的业务或者是缓存数据更新比较复杂、代价比较高的业务。例如一个缓存涉及多个表的多个字段在 1 分钟内被修改了 100 次但是这个缓存在 1 分钟内就被读取了 1 次。如果使用这种存储模式只删除缓存的话那么 1 分钟内这个缓存不过就重新计算一次而已开销大幅度降低。 ● Read/Write Through读写穿透 写 缓存存在更新数据库缓存不存在同时更新缓存和数据库 读 缓存未命中由缓存服务加载数据并且写入缓存 特点 读写穿透对热数据友好特别适合有冷热数据区分的场合。 1简化应用程序代码 在缓存方法中应用程序代码仍然很复杂并且直接依赖于数据库如果多个应用程序处理相同的数据甚至会出现代码重复。读写穿透模式将一些数据访问代码从应用程序转移到缓存层这极大地简化了应用程序并更清晰地抽象了数据库操作。 2具有更好的读取可伸缩性 在多数情况下缓存数据过期以后多个并行用户线程最终会打到数据库再加上数以百万计的缓存项和数千个并行用户请求数据库上的负载会显著增加。读写穿透可以保证应用程序永远不会为这些缓存项访问数据库这也可以让数据库负载保持在最小值。 3具有更好的写性能 读写穿透模式可以让应用程序快速更新缓存并返回之后它让缓存服务在后台更新数据库。当数据库写操作的执行速度不如缓存更新的速度快时还可以指定限流机制将数据库写操作安排在非高峰时间进行减轻数据库的压力。 4过期时自动刷新缓存 读写穿透模式允许缓存在过期时自动从数据库重新加载对象。这意味着应用程序不必在高峰时间访问数据库因为最新数据总是在缓存中。 ● Write Behind Caching异步缓存写入 写只更新缓存缓存服务异步更新数据库。 读缓存未命中由封装好的缓存服务加载数据并且写入缓存。 特点写性能最高定期异步刷新数据库数据数据丢失的概率大适合写频率高并且写操作需要合并的场景。使用异步缓存写入模式数据的读取和更新通过缓存进行与读写穿透模式不同更新的数据并不会立即传到数据库。相反在缓存服务中一旦进行更新操作缓存服务就会跟踪脏记录列表并定期将当前的脏记录集刷新到数据库中。作为额外的性能改善缓存服务会合并这些脏记录合并意味着如果相同的记录被更新或者在缓冲区内被多次标记为脏数据则只保证最后一次更新。对于那些值更新非常频繁例如金融市场中的股票价格等场景这种方式能够很大程度上改善性能。如果股票价格每秒钟变化 100 次则意味着在 30 秒内会发生 30 x 100 次更新合并将其减少至只有一次。 3、缓存 7 大经典问题 问题的常用解决方案 1 缓存集中失效 缓存集中失效大多数情况出现在高并发的时候如果大量的缓存数据集中在一个时间段失效查询请求会打到数据库数据库压力凸显。比如同一批火车票、飞机票当可以售卖时系统会一次性加载到缓存并且过期时间设置为预先配置的固定时间那过期时间到期后系统就会因为热点数据的集中没有命中而出现性能变慢的情况。 解决方案 使用基准时间 随机时间降低过期时间的重复率避免集体失效。即相同业务数据设置缓存失效时间时在原来设置的失效时间基础上再加上一个随机值让数据分散过期同时对数据库的请求也会分散开避免瞬时全部过期对数据库造成过大压力。 2 缓存穿透 缓存穿透是指一些异常访问每次都去查询压根儿就不存在的 key导致每次请求都会打到数据库上去。例如查询不存在的用户查询不存在的商品 id。如果是用户偶尔错误输入问题不大。但如果是一些特殊用户控制一批肉鸡持续的访问缓存不存在的 key会严重影响系统的性能影响正常用户的访问甚至可能会让数据库直接宕机。我们在设计系统时通常只考虑正常的访问请求所以这种情况往往容易被忽略。 解决方案 第一种方案就是查询到不存在的数据时首次查询数据库即便数据库没有数据仍然回种这个 key 到缓存并使用一个特殊约定的 value 表示这个 key 的值为空。后面再次出现对这个 key 的请求时直接返回 null。为了健壮性设置空缓存 key 时一定要设置过期时间以防止之后该 key 被写入了数据。 第二种方案是构建一个 BloomFilter 缓存过滤器记录全量数据这样访问数据时可以直接通过 BloomFilter 判断这个 key 是否存在如果不存在直接返回即可压根儿不需要查询缓存或数据库。比如可以使用基于数据库增量日志解析框架阿里的 canal通过消费增量数据写入到 BloomFilter 过滤器。BloomFilter 的所有操作也是在内存里实现性能很高要达到 1% 的误判率平均单条记录占用 1.2 字节即可。同时需要注意的是 BloomFilter 只有新增没有删除操作对于已经删除的 key 可以配合上述缓存空值解决方案一起使用。Redis 提供了自定义参数的布隆顾虑器可以使用 bf.reserve 进行创建需要设置参数 error_rate错误率和 innitial_size。error_rate 越低需要的空间越大innitial_size 表示预计放入的元素数量当实际数量超过这个值以后误判率会上升。 3 缓存雪崩 缓存雪崩是缓存机器因为某种原因全部或者部分宕机导致大量的数据落到数据库最终把数据库打死。例如某个服务恰好在请求高峰期间缓存服务宕机本来打到缓存的请求这是时候全部打到数据库数据库扛不住在报警以后也会宕机重启数据库以后新的请求会再次把数据库打死。 解决方案 事前缓存采用高可用架构设计redis 使用集群部署方式。对重要业务数据的数据库访问添加开关当发现数据库出现阻塞、响应慢超过阈值的时候关闭开关将一部分或者全都的数据库请求执行 failfast 操作。 事中引入多级缓存架构增加缓存副本比如新增本地 ehcache 缓存。引入限流降级组件对缓存进行实时监控和实时报警。通过机器替换、服务替换进行及时恢复也可以通过各种自动故障转移策略自动关闭异常接口、停止边缘服务、停止部分非核心功能措施确保在极端场景下核心功能的正常运行。 事后redis 持久化支持同时开启两种持久化方式我们可以综合使用 AOF 和 RDB 两种持久化机制用 AOF 来保证数据不丢失作为数据恢复的第一选择用 RDB 来做不同程度的冷备在 AOF 文件都丢失或损坏不可用的时候还可以使用 RDB 来进行快速的数据恢复。同时把 RDB 数据备份到远端的云服务如果服务器内存和磁盘的数据同时丢失依然可以从远端拉取数据做灾备恢复操作。 4 缓存数据不一致 同一份数据既在缓存里又在数据库里肯定会出现数据库与缓存中的数据不一致现象。如果引入多级缓存架构缓存会存在多个副本多个副本之间也会出现缓存不一致现象。缓存机器的带宽被打满或者机房网络出现波动时缓存更新失败新数据没有写入缓存就会导致缓存和 DB 的数据不一致。缓存 rehash 时某个缓存机器反复异常多次上下线更新请求多次 rehash。这样一份数据存在多个节点且每次 rehash 只更新某个节点导致一些缓存节点产生脏数据。再比如数据发生了变更先删除了缓存然后要去修改数据库此时还没修改。一个请求过来去读缓存发现缓存空了去查询数据库查到了修改前的旧数据放到了缓存中。随后数据变更的程序完成了数据库的修改数据库和缓存中的数据不一样了。 解决方案 设置 key 的过期时间尽量短让缓存更早的过期从 db 加载新数据这样无法保证数据的强一致性但是可以保证最终一致性。 cache 更新失败以后引入重试机制比如连续重试失败以后可以将操作写入重试队列当缓存服务可用时将这些 key 从缓存中删除当这些 key 被重新查询时重新从数据库回种。 延时双删除策略首先删除缓存中的数据在写数据库休眠一秒以后具体时间需要根据具体业务逻辑的耗时进行调整再次删除缓存。这样可以将一秒内造成的所有脏数据再次删除。 缓存最终一致性使客户端数据与缓存解耦应用直接写数据到数据库中。数据库更新 binlog 日志利用 Canal 中间件读取 binlog 日志。Canal 借助于限流组件按频率将数据发到 MQ 中应用监控 MQ 通道将 MQ 的数据更新到 Redis 缓存中。 更新数据的时候根据数据的唯一标识将操作路由之后发送到一个 jvm 内部队列中。读取数据的时候如果发现数据不在缓存中那么将重新执行 “读取数据 更新缓存” 的操作根据唯一标识路由之后也发送到同一个 jvm 内部队列中。该方案对于读请求进行了非常轻度的异步化使用一定要注意读超时的问题每个读请求必须在超时时间范围内返回。因此需要根据自己的业务情况进行测试可能需要部署多个服务每个服务分摊一些数据的更新操作。如果一个内存队列里居然会挤压 100 个业务数据的修改操作每个操作操作要耗费 10ms 去完成那么最后一个读请求可能等待 10 * 100 1000ms 1s 后才能得到数据这个时候就导致读请求的长时阻塞。 5 竞争并发 当系统的线上流量特别大的时候缓存中会出现数据并发竞争的现象。在高并发的场景下如果缓存数据正好过期各个并发请求之间又没有任何协调动作这样并发请求就会打到数据库对数据造成较大的压力严重的可能会导致缓存 “雪崩”。另外高并发竞争也会导致数据不一致问题例如多个 redis 客户端同时 set 同一个 key 时key 最开始的值是 1本来按顺序修改为 2,3,4最后是 4但是顺序变成了 4,3,2最后变成了 2。 解决方案 分布式锁 时间戳 可以基于 redis 或者 zookeeper 实现一个分布式锁当一个 key 被高并发访问时让请求去抢锁。也可以引入消息中间件把 Redis.set 操作放在消息队列中。总之将并行读写改成串行读写的方式从而来避免资源竞争。对于 key 的操作的顺序性问题可以通过设置一个时间戳来解决。大部分场景下要写入缓存的数据都是从数据库中查询出来的。在数据写入数据库时可以维护一个时间戳字段这样数据被查询出来时都会带一个时间戳。写缓存的时候可以判断一下当前数据的时间戳是否比缓存里的数据的时间戳要新这样就避免了旧数据对新数据的覆盖。 6 热点 Key 问题 对于大多数互联网系统数据是分冷热的访问频率高的 key 被称为热 key比如热点新闻、热点的评论。而在突发事件发生时瞬间会有大量用户去访问这个突发热点信息这个突发热点信息所在的缓存节点由于超大流量而达到理网卡、带宽、CPU 的极限从而导致缓存访问变慢、卡顿、甚至宕机。接下来数据请求到数据库最终导致整个服务不可用。比如微博中数十万、数百万的用户同时去吃一个新瓜秒杀、双 11、618 、春节等线上促销活动明星结婚、离婚、出轨这种特殊突发事件。 解决方案 要解决这种极热 key 的问题首先要找出这些 热 key 。对于重要节假日、线上促销活动、凭借经验可以提前评估出可能的热 key 来。而对于突发事件无法提前评估可以通过 Spark 或者 Flink进行流式计算及时发现新发布的热点 key。而对于之前已发出的事情逐步发酵成为热 key 的则可以通过 Hadoop 进行离线跑批计算找出最近历史数据中的高频热 key。还可以通过客户端进行统计或者上报。找到热 key 后就有很多解决办法了。首先可以将这些热 key 进行分散处理。redis cluster 有固定的 16384 个 hash slot对每个 key 计算 CRC16 值然后对 16384 取模可以获取 key 对应的 hash slot。比如一个热 key 名字叫 hotkey可以被分散为 hotkey#1、hotkey#2、hotkey#3……hotkey#n这 n 个 key 就会分散存在多个缓存节点然后 client 端请求时随机访问其中某个后缀的热 key这样就可以把热 key 的请求打散。 其次也可以 key 的名字不变对缓存提前进行多副本 多级结合的缓存架构设计。比如利用 ehcache或者一个 HashMap 都可以。在你发现热 key 以后把热 key 加载到系统的 JVM 中之后针对热 key 的请求可以直接从 jvm 中获取数据。再次如果热 key 较多还可以通过监控体系对缓存的 SLA 实时监控通过快速扩容来减少热 key 的冲击。 7 大 Key 问题 有些时候开发人员设计不合理在缓存中会形成特别大的对象这些大对象会导致数据迁移卡顿另外在内存分配方面如果一个 key 特别大当需要扩容时会一次性申请更大的一块内存这也会导致卡顿。如果大对象被删除内存会被一次性回收卡顿现象会再次发生。在平时的业务开发中要尽量避免大 key 的产生。如果发现系统的缓存大起大落极有可能是大 key 引起的这就需要开发人员定位出大 key 的来源然后进行相关的业务代码重构。Redis 官方已经提供了相关的指令进行大 key 的扫描可以直接使用。 解决方案 如果数据存在 Redis 中比如业务数据存 set 格式大 key 对应的 set 结构有几千几万个元素这种写入 Redis 时会消耗很长的时间导致 Redis 卡顿。此时可以扩展新的数据结构同时让 client 在这些大 key 写缓存之前进行序列化构建然后通过 restore 一次性写入。 将大 key 分拆为多个 key尽量减少大 key 的存在。同时由于大 key 一旦穿透到 DB加载耗时很大所以可以对这些大 key 进行特殊照顾比如设置较长的过期时间比如缓存内部在淘汰 key 时同等条件下尽量不淘汰这些大 key。 文章转载自: http://www.morning.lfdrq.cn.gov.cn.lfdrq.cn http://www.morning.jnzfs.cn.gov.cn.jnzfs.cn http://www.morning.zxhhy.cn.gov.cn.zxhhy.cn http://www.morning.krjrb.cn.gov.cn.krjrb.cn http://www.morning.fssjw.cn.gov.cn.fssjw.cn http://www.morning.nzwp.cn.gov.cn.nzwp.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn http://www.morning.hsjfs.cn.gov.cn.hsjfs.cn http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.pghry.cn.gov.cn.pghry.cn http://www.morning.rzcbk.cn.gov.cn.rzcbk.cn http://www.morning.mbrbg.cn.gov.cn.mbrbg.cn http://www.morning.lmxrt.cn.gov.cn.lmxrt.cn http://www.morning.tmbfz.cn.gov.cn.tmbfz.cn http://www.morning.jtnph.cn.gov.cn.jtnph.cn http://www.morning.tjqcfw.cn.gov.cn.tjqcfw.cn http://www.morning.xckrj.cn.gov.cn.xckrj.cn http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn http://www.morning.pbwcq.cn.gov.cn.pbwcq.cn http://www.morning.qflwp.cn.gov.cn.qflwp.cn http://www.morning.thrcj.cn.gov.cn.thrcj.cn http://www.morning.bntfy.cn.gov.cn.bntfy.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.ndxmn.cn.gov.cn.ndxmn.cn http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.hxrg.cn.gov.cn.hxrg.cn http://www.morning.trqsm.cn.gov.cn.trqsm.cn http://www.morning.bxrlt.cn.gov.cn.bxrlt.cn http://www.morning.pdynk.cn.gov.cn.pdynk.cn http://www.morning.yqsr.cn.gov.cn.yqsr.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.xcnwf.cn.gov.cn.xcnwf.cn http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.ktlxk.cn.gov.cn.ktlxk.cn http://www.morning.smrty.cn.gov.cn.smrty.cn http://www.morning.yxshp.cn.gov.cn.yxshp.cn http://www.morning.mkygc.cn.gov.cn.mkygc.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn http://www.morning.qxmpp.cn.gov.cn.qxmpp.cn http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn http://www.morning.qztdz.cn.gov.cn.qztdz.cn http://www.morning.dkslm.cn.gov.cn.dkslm.cn http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn http://www.morning.mmkrd.cn.gov.cn.mmkrd.cn http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn http://www.morning.ltdxq.cn.gov.cn.ltdxq.cn http://www.morning.kxrld.cn.gov.cn.kxrld.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.tzzxs.cn.gov.cn.tzzxs.cn http://www.morning.mlcwl.cn.gov.cn.mlcwl.cn http://www.morning.pmhln.cn.gov.cn.pmhln.cn http://www.morning.gyrdn.cn.gov.cn.gyrdn.cn http://www.morning.fpryg.cn.gov.cn.fpryg.cn http://www.morning.mtqqx.cn.gov.cn.mtqqx.cn http://www.morning.dgsr.cn.gov.cn.dgsr.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn http://www.morning.jwsrp.cn.gov.cn.jwsrp.cn http://www.morning.mooncore.cn.gov.cn.mooncore.cn http://www.morning.ldhbs.cn.gov.cn.ldhbs.cn http://www.morning.jydky.cn.gov.cn.jydky.cn http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn http://www.morning.jgncd.cn.gov.cn.jgncd.cn http://www.morning.zkjqj.cn.gov.cn.zkjqj.cn http://www.morning.nnpwg.cn.gov.cn.nnpwg.cn http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn http://www.morning.hrnrx.cn.gov.cn.hrnrx.cn http://www.morning.rlfr.cn.gov.cn.rlfr.cn http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.hcwlq.cn.gov.cn.hcwlq.cn http://www.morning.kdjtt.cn.gov.cn.kdjtt.cn http://www.morning.tbzcl.cn.gov.cn.tbzcl.cn 查看全文 http://www.tj-hxxt.cn/news/243255.html 相关文章: 如何提高网站用户体验旅游网站专业化建设的要点 云南省玉溪市建设局官方网站网站开发维护合同范本 企业网站脚本语言国内h5网站欣赏 安徽合肥建设局网站建设集团工程有限公司 百度h5可以做网站吗wordpress导航主题模板 聊城做网站多少钱长沙有哪些app开发公司 南京秦淮区建设局网站网站 导航条 做电商要不要公司网站制作网站付费软件 21天网站建设实录怎么制作动态的网站 在哪个网站找装修公司高端网站建设郑州 如何用ps做网站导航条图书馆网站建设方案 用flash做网站超链接北京服饰电商网站建设 注册公司网站开发建设营业项目wordpress图片二级域名 行业资讯平台网站建设中国电商网站排行榜 城阳网站建设电话台州做微网站 域名网络的解析网站wordpress 响应式 企业网站 购物网站设计方案干部网络培训平台 井研移动网站建设华为品牌vi设计 企业网站策划过程网站制作的知识 兴山县铁路建设协调指挥部网站专业的网络推广 网站添加合适图片asp网站免费模板 网站设计用什么做千万不要签劳务外包合同 html5特效网站源码wordpress 调用侧边栏 国际互联网网站seo综合查询是什么 wordpress后台管理地址更改网站改版优化 网站没做好可以备案吗wordpress代码优化插件 西昌建设工程招聘信息网站亚马逊如何做折扣网站的营销 信用卡在哪些网站上做推广北京移动端网站开发 程序员自己做网站赚钱免费源码html网站 张家口万全区建设网站科技强国向秦始皇直播四大发明