自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

huangleijay的专栏

重剑无锋,大巧不工

  • 博客(519)
  • 资源 (13)
  • 问答 (1)
  • 收藏
  • 关注

原创 mac系统安装jdk

打开终端, 在命令提示符后面直接输入 : javac , 按回车键,系统会输出 javac 的帮助信息, 如果成功说明已经成功配置了JDK , 否则需要仔细检查上面的步骤的配置是否正确。下载完成后,我们得到一个dmg的安装包,如下图所示,名称为 jdk-8u144-macosx-x64.dmg ,表示这是Java 8版本号为144的JDK安装包。其中Contents下的Home文件夹,是该JDK的根目录。第三步 : 安装好JDK后需要配置JDK的环境变量,再双击中间的pkg文件,开始安装,如下图所示。

2024-04-18 16:26:58 82

原创 从工作中理解JAVA 内存溢出分析

Shallow Size对象自身占用的内存大小,不包括它引用的对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。针对数组类型的对象,它的大小是数组元素对象的大小总和。Retained SizeRetained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)换句话说,Retained Size就是当前对象被GC后,从He

2022-02-22 17:14:38 183

原创 从工作中理解如何使用同步和异步设计

异步的使用场景:1、不涉及共享资源,或对共享资源只读,即非互斥操作2、没有时序上的严格关系 ## @hxx 这一点需要深刻理解,在云搜edoc-svc中,为什么不使用异步,因为帖子需要严格保序!3、不需要原子操作,或可以通过其他方式控制原子性4、常用于IO操作等耗时操作,因为比较影响客户体验和使用性能5、不影响主线程逻辑同步的使用场景:不使用异步的时候同步的好处:1、同步流程对结果处理通常更为简单,可以就近处理。2、同步

2022-02-22 17:12:32 463

原创 从工作代码中理解java lambda表达式

前言:1: 语法格式如下lambda 表达式的语法格式如下:(parameters) -> expression 或 (parameters) ->{ statements; }2: 什么时候用?在云搜中,为了获取pod中某一个元素的信息,需要一层一层的剥开json数组,使用for循环非常的烦恼用两行代码搞定// 当前shard所有副本都会拿到 List<Pod> allpods = client.pods().inNamespace(name

2022-02-22 17:09:39 309

原创 记一次线上服务迁移方案调研

前言对于任何一个模块或服务或框架来说都需要具备可升级性。升级背后的诉求可能是多种: 版本的升级,寻求更安全的代码或者享用更强大的功能。 当前服务已经不能承担目前的用户量,急需要横向扩容升级。 其他外界因素引发的升级需求,如机房迁移等。 正文本文要讲的Kafka架构的升级,原因是上述讲的第二种。在kafka横向扩容中,首先调研了kafka本身架构具备的横向扩容能力。即将新broker加入到新的集群即可,新broke...

2020-07-26 18:37:02 300

原创 kafka集群机器数目计算

前言:如何在业务上敲定kafka的机器数目!需要遵循的前提是,单数原则,就是zookeeper和broker的节点数目最好是单数!分区分配给消费者有三个策略,默认是第一个。RangeAssignor策略:假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。@hxx 针对于单个topic分区的分配,如果一个consumer同时订阅了多个topic,那么对于多个topic而言,某个consumer可能分配

2020-07-15 20:21:50 1684

原创 kubernetes 自定义调度器

todo:1: 修改proiority 打分逻辑,加上load的权重2: 编译新的调度器,打包推上线3: 为某些deployment 指定使用新的调度器正文2:编译新的调度器,打包上线参考 https://k8smeetup.github.io/docs/tasks/administer-cluster/configure-multiple-schedulers/3:指定调度器通过提供调度器名称作为spec.schedulerName参考同上连接...

2020-07-14 20:14:33 1003

原创 kubernetes 自定义调度器-02

背景加上machine_load 的打分权重,需要调研其他维度的分值区间,将load在其中的的地位加重!正文balanced_resource_allocation计算资源(request cpu和mem)的均衡情况,分值大小为0-10分,10分为最佳均衡image_locality镜像是否在本地存在,是根据镜像大小之和来计算,越大分值越高,分值区间是0-10interpod_affinitypod间亲和力和反亲和力打分,需要考虑是pref...

2020-07-14 20:13:39 582

原创 k8s node 和pod匹配的几种方式

nodeSelector强制匹配,是podSpec的一个字段,键值对匹配,先为node打上标签,再为node指定标签,如proxy。Affinity and anti-affinitynodeAffinitynodeAffinity操作方式也和nodeSelect相同,优势是:语法更具表现力(不仅仅支持“与(AND)”完全匹配)可以指明规则是“soft/preference”而不是强制要求,所以如果不满足调度条件,pods依然可以被调度。可以将规则限制在运行在一个节点上的pods

2020-07-13 20:03:55 1006

原创 从零搭建kubernetes集群之etcd搭建中的一些坑总结

etcdctl --endpoints "http://10.16.**.**:2377" member listexport ETCDCTL_API=3#etcdctl --endpoints "http://10.16.**.**:2377" --prefix --keys-only=true get /etcdctl --endpoints "http://10.16.**.**:2377" get /registry/configmaps/wcs-online/indexproxy.

2020-07-13 20:03:08 501

原创 在实际项目中如何组织docker容器和进程的关系

前言1: 在日常启动中,一个容器含有多个进程。那么哪个才是与容器生命周期相关的进程呢?2: 在容器的dockerfile文件中,CMD可以指定容器需要执行的命令(或者entrypoint),其实这就是docker容器的住进程3: 其实docker容器建议使用单进程,但是我们经常使用多进程,并且采取了讲多个命令写到pod的一个脚本中。然后在Dockerfile中,将start-kubernetes.sh指定为Docker容器默认执行的命令即可:CMD ["start-kubernetes.

2020-07-13 19:59:47 824

原创 docker 容器身份设置详解

前言遇到好几个问题1: docker push 到仓库后,docker run 进去看到的文件的权限,是源目录的文件权限相似还是与执行push命令的权限相似? 目前看不是与源目录的权限相同2: docker运行的账户怎么指定?3: kubernetes中docker运行的账户怎么指定?正文1: 对应上面第一点在镜像源目录下,对所有的源文件修改了账户和分组,push 后,使用docker run依然看到的是root权限。 整个打镜像的过程都是使用root操作镜像的!..

2020-07-13 19:57:57 401

原创 kubernetes dns详解

背景:解释 kube-proxy 和kube-dns 的区别@hxx 一句话总结访问任何一个服务都需要知道ip+port,这是无疑的,那么访问service也当然需要,kube-dns是为了解决通过域名来访问service!而,从pod 访问 service(也可以说是到service后面的pod),是需要kube-proxy来实现的,kube-proxy实现的方式有两个:userspace 和iptables!可以理解为 kube-dns 只是其中的一个域名服务,和edoc一样,只要部

2020-06-27 15:32:07 1212

原创 记一次管道流的问题定位过程

背景:云搜同一query多次查询,结果数目不一致,或者排序不稳定?经过排查,结果数目不一致,是因为副本间数据不一致导致(build请求edoc偶发超时),而云搜的svc模式并不能保证同一个query落到一个副本上,所以出现了同query多次请求结果变化而,排序不稳定,部分是因为,当多个doc打分相同的情况下,排序规则是根据索引中的docid来排的(注意,非主键id,而是从1开始算的),此docid从1开始根据如索引时间来递增,而在多副本的的build中,不同doc进入索引的时机并不能保证!.

2020-06-27 14:51:02 164

原创 kubernetes资源实现解密

背景:k8s调度的基本单元是pod,但是对资源的限制是在容器粒度上的k8s对资源的限制设置,最终原理是赋值到docker使用linux 的cgroup 的cpuset来实现k8s--->docker--->linuxcgroupk8s的设置参数主要有:Limits:cpu: 16memory: 20GiRequests:cpu: 10mmemory: 10Midocker的参数主要有:v1.13以后–cpus 指定容器所需的cpu核数...

2020-06-27 14:49:54 170

原创 CPU使用过低,load过高

1:按照网上说的,这种情况很有可能下面的情况等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就体现到负载过大了,cpu使用率低。使用“iostat -txk 1”或者“sar -d 1”(每个一秒采样)来查看:io阻塞会让出cpu,如果大多数的进程都在阻塞,那么会造成太多的上下文切换,这种切换消耗了cpu的时间,但是没有真正的执行任务!根据load的官方解释:System load averages is the average numbe..

2020-06-21 15:53:35 1909

原创 kubernetes资源设置-2

前言本笔记详解,kubernetes调度器在调度时的策略a:预选的策略b:优选的策略,会考虑哪些维度,各个维度的权重如何优选和预选考虑的机器负载指标(cpu+mem),不是线上实时的指标,而是分配出去的资源上下限! @hxx 这就要求我们分配的量是否和线上真实load是否成正相关关系!正文摘自 http://dockone.io/article/28851:预选策略a: NoDiskConflict , pod所需的卷是否和节点已存在的卷冲突。如果节点已经挂载了某个卷,.

2020-06-21 15:51:36 130

原创 heapster+influxdb+grafana

Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。在较新的版本中,K8S已经将cAdvisor功能集成到kubelet组件中。每个Node节点可以直接进行web访问。Heapster是一个收集者,Heapster可以收集Node节点上的cAdvisor数据,将每个Node上的cAdvisor的数据进行汇总,还可以按.

2020-06-21 15:50:57 172

原创 CPU使用过低,load过高-2

1: 一个个pod剔除,直到机器load为0(空机器)关注“上下文切换” 指标记录移除了哪些pod 产生了哪些变化验证free少的机器,load高?结论:a:进程数越多,即使CPU空闲率比较高,但是load还是有可能比较高,因为进程切换占用CPU时间b:io wait 也会造成load虚高,需要排查 iostat -xz 1 看%util是否过高分析结果:a:机器没有流量,pod比较多(20+searcher pod),负载在2左右,比较高机器没有流量,无po..

2020-06-21 15:49:51 299

原创 pod重启和生命周期

前言1:如何构造pod原地重启,即pod ip不发生改变2: 怎么构造pod init容器多次执行3: 当pod 非init容器全部删除,是否会导致pod所有容器全部执行?摘自:https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/正文0: pod定义与单个应用容器一样,pod被认为是相对短暂的(而不是持久的)实体。正如在pod的生命周期中所讨论的,创建pod,分配唯一ID(UID)..

2020-06-21 15:46:31 917

原创 docker容器和虚拟机

前言1: 只知道虚拟机会对硬件进行虚拟化,容器使用的硬件资源还是宿主机的正文1: 对 Docker 项目来说,它最核心的原理实际上就是为待创建的用户进程: 启用 Linux Namespace 配置; 设置指定的 Cgroups 参数; 切换进程的根目录(Change Root)。2: 实际上,同一台机器上的所有容器,都共享宿主机操作系统的内核。这就意味着,如果你的应用程序需要配置内核参数、加载额外的内核模块,以及跟内核进行直接的交互,你就需要注意了:这些操作和依赖的对...

2020-06-21 15:40:13 185

原创 kubernetes ipvs下svc访问

前言追踪svc访问服务的轨迹新的kubernetes版本的kube-proxy使用了ipvs(非iptables)kube-proxy的IPVS模式用的上NAT模式,因为DR,TUN模式都不支持端口映射。https://www.bladewan.com/2018/12/10/kubernetes_service_mode/正文1: ip a 查看kube-ipvsservice 会分配一个clusterIP,endpoint是它的域名。kube-pr...

2020-06-21 15:29:00 711

原创 kubernetes网络总结和实战

前言理清kubernetes网络1: 容器到主机互访2:本机容器到容器互访3:跨主机容器互访其他知识:1: 网关,路由2: iptables3: 网络七层4:数据头正文1: 容器到主机互访a:使用Veth Pair,一端是容器内的veth0网卡,一端插在网桥docker0上!b:到达docker0后,就相当于到达宿主机,根据宿主机的路由规则进行下一步!容器内的请求要到主机,使用veth pair,即从veth0的流入的数据包一定会到达doc..

2020-06-21 15:21:33 361

原创 kubernetes 探针设置

在builder中加上了存活探针:image: wcs.online.registry.58corp.com:8000/wcs-online/wcsk8sctl:v1.0imagePullPolicy: Alwaysports:- containerPort: 3218name: debugprotocol: TCPlivenessProbe:tcpSocket:port: 20021initialDelaySeconds: 5periodSeconds: 1

2020-06-21 15:17:45 804

原创 kubernetes的一些技术要点(可作为年OKR)

1:云搜二期使用k8s提升了哪些点?环境打包(使用仓库镜像版本,完美解决)自动化部署,重置分片,重建(一期未能有效的实现重建,重置分片功能)资源极大优化:包括机器利用率(减少了50%+的机器),剔除01版本,配额(限制应用最大最低使用资源),资源隔离(可以对商业应用建立集群,保证高优先级)2:对于上面的点,云搜二期是如何将搜索云化的?@hxx可以按这个来扯云搜集群二期a:首先将各模块容器化(查询+数据流程各个模块都容器化了)b:init...

2020-06-21 15:12:51 216

原创 搜索提示原理浅谈

前言搜索提示要实现哪些功能?a: 支持前缀匹配,如输入”海底“,提示”海底捞“b:同时支持汉字,拼音输入 @hxx 有java组件可实现c:支持多音字,如 ”chongqing“ 和 ”zhongqing“ 都应该提示”重庆“ @hxx 注意,多音字涉及到组合全排列d:支持拼音缩写, 如“cq”,提示“重庆” @hxx 在b的时候抽取e: 基于用户的历史搜索行为,按照关键字热度进行排序 为了提供suggest关键字的准确度,进行排序。正文1:mt的实现: trie..

2020-06-13 16:36:06 420

原创 ElasticSearcher对不同字段类型索引方式

背景1: 核心数据类型(strings, numbers, booleans及dates)以不同的方式进行索引,而这点也是现实:在Elasticsearch中他们是被区别对待的2: 确切值(exact values)(比如string类型)及全文文本(full text)之间的区别,这是搜索引擎和数据库之间搜索的根本差异正文1: analysisfulltext或者分词字段,查询和索引都会经过同一套analysis模块,这个功能和esearch一样,包含过滤(大小写,空格,特..

2020-06-13 16:34:08 426

原创 倒排链求交过程--Lucene

前言自己理解的倒排求交:1: 首先倒排链是排序的,根据docid大小排序2: 比如现在有两个倒排链(对应于两个term的查询结果),现在需要求交3: 两个指针在倒排链上移动,先移动拥有较小头的链的首指针,找到大于等于另一个链首的时候,停下4: 如果等于,则放到记录此docid, 大于则移动另一条5: 记录下来的docid就是求交后的结果集如果三条的倒排链求交?答案是可以同时用三个指针,不要想着两个结束后操作第三个正文下面给出Lucene的倒排链求交的过程..

2020-06-13 16:32:46 1062 1

原创 ElasticSearcher索引

前言1:查询的过程是怎样的(结合架构分析)2:索引过程是怎样的(结合架构分析)3:ES索引的存储结构是怎样的本文只介绍索引正文1: 索引过程文档只有在segment中才能被查询,建索引的时候是放在内存中,此内存不是一个segment。refresh操作是生成新segment,fsync是将translog刷新到磁盘,flush相当于一次segment落盘。a: 更新的doc,先会被放在mem-buffer中,即在建完的正倒排信息放在内存中,并且将此次id...

2020-06-13 16:30:34 240

原创 探寻ES中的数据并发问题

前言1: 删除文档后,版本信息默认会保留60s。2: 关于cas重试,是需要重新get 一下version的,那肯定会成功吧?这个场景主要在,对于多用户的局部更新,文档被修改了并不要紧。例如,两个进程都要增加页面浏览量,增加的顺序我们并不关心——如果冲突发生,我们唯一要做的仅仅是重新尝试更新既可。正文1: ES使用乐观锁,即版本号策略来保证数据一致性PUT /test_index/test_type/6{"test_field": "test test"}...

2020-06-13 16:29:43 749

原创 删除队列实现

前言需要确认的地方!1: 内存段中的数据删除后是否立即删除,查不到信息?即内存段,是否没有删除表?是有的,读段都有delete map2: 内核说,能查到标记删除的文档的版本号信息,得到的是 add -- > delete ---> now 这里面的delete版本号信息吗? 我感觉可能是add的信息,如果是的话,那么delete 需要记录版本号的信息, ES中delete也会存储一个版本号。3: 解决的痛点是,段合并的时候查不到版本号信息,也就是从3...

2020-06-13 16:29:03 459

原创 fst和skiplist

前言1:为什么要讲fst和skiplist检索的倒排结构通常包含两种结构,一个是词典(一般要加载到内存),一个是倒排表。如下图一次查询需要经历两个阶段,找到词典的位置(或者叫判断这个词存不存在),比如输入Lucene,先要找到这个词存在的位置。词典的存储结构就有两种实现方式,fst或跳表。Lucene3.0之前使用的是跳跃表结构,后换成了FST,但跳跃表在Lucene其他地方还有应用如倒排表合并和文档号索引。@hxx 跳跃表加速合并,因为布尔查询时,and 和or 操作都需要合并倒排表,..

2020-06-13 16:27:06 375

原创 行式存储和列式存储

前言1: 在ES中有一个原始文档行式存储,引发了行式存储这个概念的深究.正文1: 行式存储 vs 列式存储行式存储,如mysql数据库,表的结构都是以行为结构的,而且在存储上一行的数据都是存储在连续的空间。 那么想想针对于搜索场景,一般是term级别的操作,都需要将一行的数据完整的加载出来,性能非常不友好!所以列式存储在海量数据中有优势!行式存储适合的场景1、适合随机的增删改查操作;2、需要在行中选取所有属性的查询操作;3、需要频繁插入或更...

2020-06-13 16:24:06 545

原创 ES如何通过文档id获取正排信息

前言根据文档id定位到某个字段的正排信息,常常用于需要根据某个字段排序,分类计算,这个必须使用Doc values正文1: 在ES中原始数据是以行式存储的,也就是文档的所有字段都会连续的存储在物理空间上。这样势必会占用非常多的空间,所以一般都是压缩存储的!正排信息不是来自于原始文档中。存储原始文档的文件 如下查看原始文档的过程!第一步二分查找block,定位属于哪个block。  第二步就是根据从block里根据每个chunk的起始文档号,找到属于哪个chu...

2020-06-13 16:22:07 1560

原创 ES的倒排查询和正排查询一句话简短的几句话,收获满满

前言1:理解query到正排链的查询过程2:理解docid到取出正排值的过程正文:1: 举例说明从query到倒排链的过程query= title=爱将爱进行Unicode编码,成 ep 01xx使用词典文件(.tip,在内存),FST 路径搜索,匹配前缀,找到后缀地址,加载后缀块后缀块中,有倒排索引指针,找到 “爱” 倒排链 , docids如果多个链的话,需要进行倒排链求交,使用skiplist2: 获取正排信息拿到最终的docid 集合后, 需要进行排.

2020-06-13 16:19:14 471

原创 云搜索分布式索引一致性设计

目前流行的云搜索服务的主要特点有:1:接入快捷、运维能力强,提供了可视化运维数据、多维立体化监控和自助工具界面,实现全托管自运维。2:服务可靠、高可用。索引系统采用多副本数据和服务冗余、不同级别的隔离、集群联邦和资源预留等容灾机制,确保高可用性。宕机时副本自动迁移、恢复服务、同步索引数据,无需手工介入,做到用户无感知。3:文档属性丰富,搜索方式多样化。在索引服务流程中文档被嵌入了丰富信...

2020-04-28 10:10:35 379

原创 尾插法和头插法JDK源码解读

一:尾插法jdk1.8 源码​​​​​​// @hxx 插入方法,调用putValpublic V put(K key, V value) { return putVal(hash(key), key, value, false, true); }// @hxx 看看是如何实现尾插法的 final V putVal(int hash, K key, V...

2019-08-24 14:31:40 697

原创 ElasticSearch查询原理一篇文章搞懂

1ES架构简介国际惯例,站在上帝的视角看看闻名的ElasticSearch长什么样,由于今天仅仅讲查询模块,所以对图中的大多数模块不会涉及。查询相关的模块主要有:Api接口,Transport模块,Searcher模块、索引相关。2ES查询分类ElasticSearch支持的查询有三种 query_and_fetch ...

2019-06-22 18:11:37 4315

原创 定位java内存无限上涨问题

最近一直在做性能优化方面的工作,填填项目快跑过程中留下的坑。越底层的愈是枯燥的,也越感受到欣喜。下面分享给读者一个java服务吃掉常驻内存(RES)的case,希望能对大家带来收获。在容器内跑的java服务,参数为java -Xms128M -Xmx128M -Xmn32M -Xss256K -XX:+UseG1GC经常莫名的oom killer,如下图也就是说此...

2019-04-20 17:11:04 6781 1

原创 从一道面试题剖析整个jvm内存模型

 一道面试题    凡是准备过java面试的同学都一定见过一道比较字符相等的面试题,如下:            String s1 = "1";    String s2 = "1";    System.out.println(s == s2); // true    下面我来就这道面试题层层深入,给读者带来一些新的东西,或者加深大家对这一块知识的理解。    先放一个...

2019-02-24 18:30:06 938

apktool所有文件集合+步骤

我自己写的步骤和常见的错误处理,所有资源都在里面了!注意jdk必须是1.7的

2014-11-29

liblinear-1.94.zip

liblinear分类器,适合weka和matlab调用

2014-03-12

libsvm-3.17.zip

svm分类器源码,java开发,适合weka和matlab调用

2014-03-12

代码美化器

在网站或者博客中拷贝代码时候会出现例如:1.的无意义字符,这个时候如果每个都手工去删除的话相当费时,这个工具让你的代码变得更加简洁!java编写

2013-09-21

Php面试知识点整理

原创,适合从java学习后转学php(文章中对php与java语法已经一些关键地方进行详细对比和解释),也适合语言入门者pph初学者,涵盖了知识点广适合面试准备

2013-09-17

PHP入门知识点大全

原创,适合从java学习后转学php(文章中对php与java语法已经一些关键地方进行详细对比和解释),也适合语言入门者pph初学者

2013-09-17

ffmpeg音频视频转换软件

它是一款音频视频转换软件。比较特殊的是,它是运行在windows下dos系统中,支持avi,FLV,asf,mpeg,mp3等等格式。使用方法如下:开始菜单--运行--cmd---然后再运行ffmpeg软件。

2013-06-23

CKEditor实现本地视频和图片的上传功能

CKEditor实现本地视频和图片的上传功能,不用kfinal

2013-06-18

HTML5绘图].源代码.zip

HTML5绘图].源代码.zip HTML5绘图HTML5绘图

2013-03-08

Spring2.5.中文帮助文档.chm

Spring2.5.中文帮助文档.chm

2013-02-26

R语言常见问题

R语言,统计学,数据挖掘,机器学习,常见经典问题分析,入门必备

2012-11-14

R-core-2.10.0-2.el5.x86_64.rpm

R语言,数据挖掘,数据库,统计学,机器学习,人工智能必背软件

2012-10-28

数据库系统教程

数据库系统教程

2012-05-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除