后端性能-batch 化的想法
项目中我们提高性能或者吞吐经常使用的是 batch 化,比如说获取帐号信息,我们1条1条查询可能不如我们一次查询100条性能高。
有的时候想这样是为什么呢?因为单个请求中间有网络往返、网络延迟等原因会更加频繁,或者是被请求的服务方MySQL 因为各种原因抖了一下或者什么的,都有可能。
有一次在楼下等电梯的时候,我们有6个电梯,如果一个电梯可以容纳10个人,楼层高度为10楼,那么我们的吞吐量就是 10 * 10 =100 人。
如果每个电梯一个人,那么这个时候一次往返就是6个人。
因为我们的电梯只有6个,所以在一定时间内每个电梯容纳的人多一点会增加我们系统的吞吐量。
早晨的时候物业会有一个工作人员,会在电梯那边,打开一个电梯,尽量让人多一点,然后这个电梯才会上去。我们系统中也可以借鉴,比如我们10s中一个窗口并且size = 100,如果 =100直接请求出去,如果10s中size没有到达100也会将请求发出去。
package main
import (
"fmt"
"time"
)
const _sizeNum = 10
func main() {
getCurrentTime("main start")
var timer = time.NewTicker(10 * time.Second)
for {
currentSize := getCurrentSize()
flag := false
if currentSize >= _sizeNum {
getCurrentTime("size enough")
flag = true
biz()
}
select {
case <-timer.C:
fmt.Println("timer")
if !flag {
fmt.Println("size not enough,timer send")
biz()
}
}
}
timer.Stop()
}
func getCurrentSize() int {
return 10
}
func biz() {
getCurrentTime("biz start")
time.Sleep(40 * time.Second)
getCurrentTime("biz end")
}
func getCurrentTime(str string) {
fmt.Println(str + time.Now().Format("2006-01-02 15:04:05"))
}
写了一个简单的demo,里面没有涉及到电梯数量的限制,也就是如果涉及电梯数量的限制,可以去开多个 go routine 去处理,需要判断go routine 的数量
demo中修改 currentSize 的值可以设置是否满足 batch 的条件
有一些临界资源,涉及到并发的话,需要考虑使用锁去解决
后端性能-batch 化的想法的更多相关文章
- keras系列︱利用fit_generator最小化显存占用比率/数据Batch化
本文主要参考两篇文献: 1.<深度学习theano/tensorflow多显卡多人使用问题集> 2.基于双向LSTM和迁移学习的seq2seq核心实体识别 运行机器学习算法时,很多人一开始 ...
- 面向.Net程序员的后端性能优化实战
最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一 ...
- web 性能忧化(IIS篇)
1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Settings 2. ...
- Web系统开发构架再思考-前后端的完全分离
前言 前后端完全分离其实一直是Web开发人员的梦想,也一直是我的梦想,遥想当年,无论是直接在代码里面输出HTML,还是在HTML里面嵌入各种代码,都不能让人感到满意.期间的痛苦和纠结,我想所有Web开 ...
- 由 12306.cn 谈谈高并发+高负载网站性能技术
12306.cn 网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有限的经验和了解, 所以,如果有什么问题还请大家一起讨论 ...
- asp.net网站性能优化2则
摘要:Web服务器的性能优化有很多资料介绍了,多台主机负载均衡,查询结果的多级缓 存,数据库索引优化等都是常见的优化手段.随着后端优化空间越来越小,现在越来越多 的网站更注重前端性能的优化,就是浏览器 ...
- 由12306.cn谈谈网站性能技术
12306.cn网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有 限的经验和了解,所以,如果有什么问题还请大家一起讨论和 ...
- batch normalization学习理解笔记
batch normalization学习理解笔记 最近在Andrew Ng课程中学到了Batch Normalization相关内容,通过查阅资料和原始paper,基本上弄懂了一些算法的细节部分,现 ...
- 从零开始入门 K8s | etcd 性能优化实践
作者 | 陈星宇(宇慕) 阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...
- SpringBoot+Jpa+SpringSecurity+Redis+Vue的前后端分离开源系统
项目简介: eladmin基于 Spring Boot 2.1.0 . Jpa. Spring Security.redis.Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 ...
随机推荐
- Swarm集群部署、集群架构、集群管理 、服务管理
一.部署swarm集群 #docker swarm简介 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose ...
- AI+Web3:张三的未来机会地图
热点风暴:ETHDenver 2025掀起热潮 滑动微信的那一刻,张三愣住了.热搜上,ETHDenver大会简直是技术圈的春晚.AI和Web3,这两个曾经高高在上的概念,突然变得触手可及.大会透露的一 ...
- ThreeJs-16智慧城市项目(重磅以及未来发展ai)
 项目源 ...
- PMP学习记录
本人在2020年12月已经顺利拿到PMP证书. 第一次听说PMP证书是2016年,一个同事说考试通过拿到了PMP证书,当时对PMP不是很了解.也未作深入了解,当时认为俺是做技术的,这个证书没啥用.O( ...
- 【跟K8S学设计】Informer全分析-Reflector(上)
鉴于Informer架构及其处理逻辑蕴含了丰富的实战技术,本文将分为上下两章进行深入探讨. 上篇将专注于解析Informer中的Reflector组件,而下篇则会详尽分析Indexer模块.通过这种结 ...
- 🎀Java线程池创建
简介 Java 手动创建线程池 代码 package com.zk.app.utils; import com.google.common.util.concurrent.ThreadFactoryB ...
- eolinker脚本代码[Javascript]:通过判断返回码决定是否中止执行脚本
场景描述: 请求返回码(code)不等于0时,整个脚本停止执行,并抛出信息 具体脚本: if (JSON.parse(result_api_1.response).Code != "0&qu ...
- 获取img标签文件大小
创建一个请求,然后查看返回的content-length img.src.length * 0.75 canvas转base64后
- Quill自定义插入视频video实例
import Quill from 'quill' const BlockEmbed = Quill.import('blots/block/embed') class VideoBlot exten ...
- macOS 软件推荐
五星推荐: ezip 解压压缩文件 https://ezip.awehunt.com/ (免费) microsoft To Do : https://todo.microsoft.com/tasks ...