1。Java处理的优化large-concurrency动态请求
与一般web服务器(Nginx或Apache) Java处理large-concurrency HTP请求时有点弱所以它通常是在我们的城市。固态高流量的体制改革当前数据将直接返回NginxI服务器或Web代理服务器(清漆、鱿鱼等)(可能减少序列化和反序列化的许可)应急当前数据将直接返回NginxI服务器或Web代理服务器(清漆、鱿鱼等)(可能减少序列化和反序列化的许可)Java层只处理少量数据的理想要求。关注这些请求您可以使用以下优化技术:
直接使用Servlet来处理请求。为了防止顽固的MVC框架的使用你也可以绕过很多混合和无用的处理逻辑。1毫秒的时间依赖于MVC框架的依赖程度;
直接输出流数据。(使用职责。getoutputstreamo代替resp.getWriter)可能节省一些常量字符数据编码和改善本能;数据输出时建议使用JSON而不是模板引擎(通常解释和实施)输出页面。
2。常见的问题产品并发读
有些读者可能会觉得这个问题很容易处理它只不过是把热Tair缓存中的数据。交会Tair缓存使用通用哈希为了保护命中率所以通用密钥将减少共同的平台。虽然单个Tair缓存可以支持每秒300000个请求它仍远远落后于其他受欢迎的产品在一个草率的。我们如何处理这样的单点瓶颈?答案是使用Localcache在应用程序层。即商品相关数据缓存单个机器上的系统。所以缓存数据怎么样?答案是区分理想数据和可靠的数据分别处理。产品的标题和描述是乏味的和从来没有缓存直到被打断了。理想的数据如库存将缓存所需的时间(通常几秒钟)。缓存失效后去大把最新的数据。。
读者可能仍有质疑数据如库存已经反复更新将导致超卖一旦数据不是常见的?这需要使用分层验证规则用于读取数据我们已经看到在前面。场景可能也允许某些脏数据因为这里的错误只会导致少数一空订单乞求被误认为是库存。它可能是更好的保护最终普遍性不仅仅是写数据通过数据的高可用性。通用性和普遍性之间的平滑处理高并发性数据的阅读问题。
3。通用数据并发性创新的问题
使用Localcache和分层数据验证可能处理大量并发读取的问题在一定程度上但无论如何等大型并发写库存减少的问题是无法阻止的。这也是核心技术困难的场景。
一般数据确定保存在数据库中的一行(MYSQL)所以将会有大量的线程匹配INNODB行锁。并发性越高更多的线程会等待TPS将低和RT将高数据库效率的歧义会受到严重影响。这个地方将会显示一个问题即一个受欢迎的产品将为所有数据库是有效的我们将展示一个场景我们不承诺看到一个产品生产效率为9999 0.01%。这里的处理思想也“独立”的受欢迎的产品self-reliable热库根据第一条规则中引入前面即使这将是穿保护问题(理想的热数据的迁移和self-database等等))分离受欢迎的产品到自己的数据库不处理并发问题的锁。处理并发锁的问题有以下两个措施。
第一是排队在应用程序级别。