<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[java_y_y的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/java_y_y</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; java_y_y]]></copyright><item><title><![CDATA[【Java】搜索引擎设计：信息搜索怎么避免大海捞针？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/140276715</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/140276715</guid><author>java_y_y</author><pubDate>Mon, 08 Jul 2024 19:08:41 +0800</pubDate><description><![CDATA[我们准备开发一个针对全网内容的搜索引擎，产品名称为“Bingoo”。一个完整的搜索引擎包括分布式爬虫、索引构造器、网页排名算法、搜索器等组成部分，Bingoo的系统架构如下。分布式爬虫通过存储服务器将爬取的网页存储到分布式文件集群HDFS，为了提高存储效率，网页将被压缩后存储。存储的时候，网页一个文件挨着一个文件地连续存储，存储格式如下。]]></description><category></category></item><item><title><![CDATA[【Java】如何设计RPC框架在10万QPS下实现毫秒级的服务调用？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/140068063</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/140068063</guid><author>java_y_y</author><pubDate>Sat, 29 Jun 2024 18:19:35 +0800</pubDate><description><![CDATA[来思考这样一个场景：你的垂直电商系统的 QPS 已经达到了每秒 2 万次，在做了服务化拆分之后，由于我们把业务逻辑都拆分到了单独部署的服务中，那么假设你在完成一次完整的请求时需要调用 4～5 次服务，计算下来，RPC 服务需要承载大概每秒 10 万次的请求。而你该如何设计 RPC 框架承载如此大的请求量呢？我建议你：选择合适的网络模型，有针对性地调整网络参数优化网络传输性能；选择合适的序列化方式，以提升封包、解包的性能。]]></description><category></category></item><item><title><![CDATA[【Java】如果让你设计一个支持千万级流量的架构，你会怎么设计？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/140068018</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/140068018</guid><author>java_y_y</author><pubDate>Sat, 29 Jun 2024 18:00:48 +0800</pubDate><description><![CDATA[后端环节的性能问题，可以从三个角度进行考量，为了帮助你记忆，我总结了一张脑图给你参考。比如，网络层面可以考虑网络专线、CDN 优化；架构层面可以考虑动静分离、集群优化、数据隔离、服务拆分、异步驱动、负载均衡等方案。以上就是高性能架构设计中的技术点，初中级研发工程师要能知道系统的性能瓶颈在哪儿，以及如何优化，但高级研发工程师，不能只停留掌握技术点上，而是要有自己对技术的理解（例如下面的例子）。接下来，我就通过讲解自己对高性能的认知，帮你了解并培养自己对于技术的思考。]]></description><category></category></item><item><title><![CDATA[【Java】如何优化系统架构设计来缓解流量压力提升并发性能？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/140050451</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/140050451</guid><author>java_y_y</author><pubDate>Fri, 28 Jun 2024 17:59:49 +0800</pubDate><description><![CDATA[我会以直播互动为例，带你看看读多写多的情况下如何应对流量压力。- 一般来说，这种服务多数属于实时互动服务，因为时效性要求很高，导致很多场景下，我们无法用读缓存的方式来降低核心数据的压力。所以，为了降低这类互动服务器的压力，我们可以从架构入手，做一些灵活拆分的设计改造。事实上这些设计是混合实现对外提供服务的，为了让你更好地理解，我会针对直播互动里的特定的场景进行讲解。一般来说，直播场景可以分为可预估用户量和不可预估用户量的场景，两者的设计有很大的不同，我们分别来看看。]]></description><category></category></item><item><title><![CDATA[【Java】为什么复杂的架构一定要做分层设计？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/140050163</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/140050163</guid><author>java_y_y</author><pubDate>Fri, 28 Jun 2024 17:53:48 +0800</pubDate><description><![CDATA[软件架构分层在软件工程中是一种常见的设计方式，它是将整体系统拆分成 N 个层次，每个层次有独立的职责，多个层次协同提供完整的功能。我们在刚刚成为程序员的时候，会被“教育”说系统的设计要是“MVC”（Model-View-Controller）架构。它将整体的系统分成了 Model（模型），View（视图）和 Controller（控制器）三个层次，也就是将用户视图和业务处理隔离开，并且通过控制器连接起来，很好地实现了表现和逻辑的解耦，是一种标准的软件分层架构。]]></description><category></category></item><item><title><![CDATA[【Java】短 URL 生成器设计：百亿短 URL 怎样做到无冲突？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139964884</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139964884</guid><author>java_y_y</author><pubDate>Tue, 25 Jun 2024 17:39:20 +0800</pubDate><description><![CDATA[这样长的URL显然体验并不友好。我们期望分享的是一些更短、更易于阅读的短URL，比如像这样的。当用户点击这个短URL的时候，可以重定向访问到原始的链接地址。为此我们将设计开发一个短URL生成器，产品名称是“Fuxi（伏羲）”。我们预计Fuxi需要管理的短URL规模在百亿级别，并发吞吐量达到数万级别。这个量级的数据对应的存储方案是什么样的？用传统的关系数据库存储，还是有其他更简单的办法？此外，如何提升系统的并发处理能力呢？这些是我们今天要重点考虑的问题。]]></description><category></category></item><item><title><![CDATA[【Java】设计一个支持10W QPS的评论中台，你会怎么设计？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139964557</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139964557</guid><author>java_y_y</author><pubDate>Tue, 25 Jun 2024 17:30:03 +0800</pubDate><description><![CDATA[在B站，UP主每天都会发布海量的视频、动态、专栏等内容，随之而来的是弹幕和评论区的各种讨论。播放器中直接滚动播放的弹幕，如同调味剂，重在提升视频观看体验；而点进评论区，相对而言评论文本更长，内容的观点、形式都更丰富，更像是饭后甜点。随着业务不断发展，B站的评论系统逐渐组件化、平台化；通过持续演进架构设计，管理不断上升的系统复杂度，从而更好地满足各类用户的需求。评论的基础功能模块是相对稳定的。]]></description><category></category></item><item><title><![CDATA[【Java】如何从零搭建10万级 QPS 大流量、高并发优惠券系统]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139839483</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139839483</guid><author>java_y_y</author><pubDate>Thu, 20 Jun 2024 17:56:41 +0800</pubDate><description><![CDATA[👋春节活动中，多个业务方都有发放优惠券的需求，且对发券的 QPS 量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此，我们需要设计、开发一个能够支持十万级 QPS 的券系统，并且对优惠券完整的生命周期进行维护。]]></description><category></category></item><item><title><![CDATA[【Java】如果你的系统的QPS突然提升10倍你会怎么设计？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139839392</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139839392</guid><author>java_y_y</author><pubDate>Thu, 20 Jun 2024 17:52:44 +0800</pubDate><description><![CDATA[在互联网早期的时候，单体架构就足以支撑起日常的业务需求，大家的所有业务服务都在一个项目里，部署在一台物理机器上。所有的业务包括你的交易系统、会员信息、库存、商品等等都夹杂在一起，当流量一旦起来之后，单体架构的问题就暴露出来了，机器挂了所有的业务全部无法使用了。于是，集群架构的架构开始出现，单机无法抗住的压力，最简单的办法就是水平拓展横向扩容了，这样，通过负载均衡把压力流量分摊到不同的机器上，暂时是解决了单点导致服务不可用的问题。]]></description><category></category></item><item><title><![CDATA[【Java】字节二面：如何设计一个支持10万QPS的会员系统]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139811035</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139811035</guid><author>java_y_y</author><pubDate>Wed, 19 Jun 2024 19:13:20 +0800</pubDate><description><![CDATA[因为流量比较大， 导致 ES 线程数飙高，cpu 直往上窜，查询耗时增加，并传导给所有调用方，导致更大范围的延时。如果此时有请求来查询数据，先获取分布式锁，发现该会员 ID 已经上锁了，说明 ES 刚刚更新的数据尚未生效，那么此时查询完数据后就不更新 Redis 缓存了，直接返回，这样就避免了缓存数据的不一致问题。此时，如果 ES 主集群崩了，通过统一配置，将会员系统的读写切到机房 B 的 ES 备集群上，这样即使 ES 主集群挂了，也能在很短的时间内实现故障转移，确保会员系统的稳定运行。]]></description><category></category></item><item><title><![CDATA[【Java】如果你的系统的QPS突然提升10倍你会怎么设计？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139810902</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139810902</guid><author>java_y_y</author><pubDate>Wed, 19 Jun 2024 19:05:38 +0800</pubDate><description><![CDATA[其实可以看到，怎么设计高并发系统这个问题本身他是不难的，无非是基于你知道的知识点，从物理硬件层面到软件的架构、代码层面的优化，使用什么中间件来不断提高系统的抗压能力。但是这个问题本身会带来更多的问题，微服务本身的拆分带来了分布式事务的问题，http、RPC框架的使用带来了通信效率、路由、容错的问题，MQ的引入带来了消息丢失、积压、事务消息、顺序消息的问题，缓存的引入又会带来一致性、雪崩、击穿的问题，数据库的读写分离、分库分表又会带来主从同步延迟、分布式ID、事务一致性的问题，]]></description><category></category></item><item><title><![CDATA[【Java】如何设计一个敏感词过滤系统？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139779675</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139779675</guid><author>java_y_y</author><pubDate>Tue, 18 Jun 2024 18:01:44 +0800</pubDate><description><![CDATA[AC自动机算法（Aho–Corasick算法）是一种字符串搜索算法，可以同时将目标串与所有模式串进行匹配，算法均摊情况下具有近似于线性的时间复杂度。AC自动机的匹配原理有两个核心概念：Trie字典树、Fail指针。下面以模式串集合{“she”, “he”, “shers”, “his”, “era”}为例，来介绍这两个概念。AC自动机算法启动时，需要将所有的模式串加载到内存中，构建成一个Trie字典树。]]></description><category></category></item><item><title><![CDATA[【Java】电商平台中订单未支付过期如何实现自动关单？]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139779463</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139779463</guid><author>java_y_y</author><pubDate>Tue, 18 Jun 2024 17:33:52 +0800</pubDate><description><![CDATA[📌日常开发中，我们经常遇到这种业务场景，如：外卖订单超 30 分钟未支付，则自动取订单；用户注册成功 15 分钟后，发短信息通知用户等等。这就延时任务处理场景。在电商，支付等系统中，一设都是先创建订单（支付单）,再给用户一定的时间进行支付，如果没有按时支付的话，就需要把之前的订单（支付单）取消掉。这种类以的场景有很多，还有比如到期自动收货，超时自动退款，下单后自动发送短信等等都是类似的业务问题。通过定时任务关闭订单，是一种成本很低，实现也很容易的方案。通过简单的几行代码，写一个定时任务，定期扫描数据库中的]]></description><category></category></item><item><title><![CDATA[【Java】如何设计一个秒杀系统]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139748777</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139748777</guid><author>java_y_y</author><pubDate>Mon, 17 Jun 2024 17:23:10 +0800</pubDate><description><![CDATA[说起秒杀，我想你肯定不陌生，这两年，从双十一购物到春节抢红包，再到12306抢火车票，“秒杀”的场景处处可见。简单来说，秒杀就是在同一个时刻有大量的请求争抢购买同一个商品并完成交易的过程，用技术的行话来说就是大量的并发读和并发写。不管是哪一门语言，并发都是程序员们最为头疼的部分。同样，对于一个软件而言也是这样，你可以很快增删改查做出一个秒杀系统，但是要让它支持高并发访问就没那么容易了。比如说，如何让系统面对百万级的请求流量不出故障？如何保证高并发情况下数据的一致性写？完全靠堆服务器来解决吗？]]></description><category></category></item><item><title><![CDATA[[Java]设计一个支持敏感数据存储和传输安全的加解密平台]]></title><link>https://blog.youkuaiyun.com/java_y_y/article/details/139747113</link><guid>https://blog.youkuaiyun.com/java_y_y/article/details/139747113</guid><author>java_y_y</author><pubDate>Mon, 17 Jun 2024 16:23:09 +0800</pubDate><description><![CDATA[在一个应用系统运行过程中，需要记录、传输很多数据，这些数据有的是非常敏感的，比如用户姓名、手机号码、密码、甚至信用卡号等等。这些数据如果直接存储在数据库，记录在日志中，或者在公网上传输的话，一旦发生数据泄露，不但可能会产生重大的经济损失，还可能会使公司陷入重大的公关与法律危机。公司上下辛苦十几年，一夜回到解放前。所以，敏感信息必须进行加密处理，也就是把敏感数据以密文的形式存储、传输。这样即使被黑客攻击，发生数据泄露，被窃取的数据也是密文，获取数据的人无法得到真实的明文内容，敏感数据依然被保护着。]]></description><category></category></item></channel></rss>