黄规速博客:学如逆水行舟,不进则退

大道至简、专注精进
私信 关注
hguisu
码龄13年
  • 9,777,542
    被访问量
  • 295
    原创文章
  • 209
    作者排名
  • 12,779
    粉丝数量
  • 于 2007-11-11 加入CSDN
获得成就
  • 获得5,101次点赞
  • 内容获得2,007次评论
  • 获得6,799次收藏
荣誉勋章
兴趣领域
  • #人工智能
    #算法
TA的专栏
  • 架构设计
    付费
    21篇
  • 服务治理
    1篇
  • 操作系统
    8篇
  • Linux
    28篇
  • MySQL
    13篇
  • docker
    15篇
  • k8s
    15篇
  • 专栏总结
    23篇
  • SpringBoot
    7篇
  • spring
    2篇
  • Java
    24篇
  • 知识体系
    3篇
  • PHP
    39篇
  • PHP内核
    10篇
  • 程序人生
    6篇
  • 数据结构与算法
    27篇
  • 云计算hadoop
    24篇
  • 网络知识
    11篇
  • c/c++
    21篇
  • memcache
    5篇
  • 计算机原理
    4篇
  • socket网络
    8篇
  • 设计模式
    25篇
  • AOP
    2篇
  • 重构
    11篇
  • 重构与模式
    1篇
  • 搜索引擎Search Engine
    14篇
  • 大数据处理
    11篇
  • Android
    1篇
  • webserver
    3篇
  • Redis
    20篇
  • 分布式
    1篇
感谢您支持,努力做更好

扫码打赏,你说多少就多少

  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

已经解决

回答的问题 #vmware的centos系统之前好好,突然重启报Kernel panic - not syncing:Fatal exception
回答了问题于 1 月前

vmware的centos系统之前好好,突然重启报Kernel panic - not syncing:Fatal exception

vmware的centos系统之前好好,突然重启报Kernel panic - not syncing:Fatal exception

1回答
发布问题于 1 月前

PostgreSQL入门和高维向量索引

一、安装1.添加PosgreSQL Yum Repositorywget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-ppc64le/pgdg-centos96-9.6-3.noarch.rpmyum install pgdg-centos96-9.6-3.noarch.rpm ;2
原创
0评论
2点赞
发布博客于 1 月前

专栏总结java14:dubbo

专栏总结java14:dubbo
原创
0评论
0点赞
发布博客于 5 月前

使用jstack pid > jstack.log命令把堆栈信息输出到文件后,可以查看具体阻塞的位置。



回答的问题 #Java线程阻塞问题,跟数据库有关
回答了问题于 6 月前

这不是很明显是接口返回异常了吗?不是json格式。


回答的问题 #Feign 文件上传问题 feign.codec.DecodeException: TODO
回答了问题于 6 月前

 假设你startup.sh脚本目录为:/Library/nacos/bin/startup.sh

  即startup.sh上级目录:/Library/nacos/

nacos执行目录为:/Library/nacos/


错误信息就明显看出来,解决步骤:

1、直接在终端执行这个几个命令:uname,dirname,sed是否可以?是不是需要sudo来执行。

   sudo sh startup.sh standlone也不行,说明系统需要安装相关命令。

   如果这个几个命令不存在,百度一下如何在mac下安装就可以。

2、由于dirname命令失败,导致无法定位到nacos执行目录。

   所以启动命令相关参数变成如下。

  -Dloader.path=//plugins/health,//plugins/cmdb

  -Dnacos.home=/ -jar //target/nacos-server.jar 

 --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file://conf/

 --logging.config=//conf/nacos-logback.xml

实际应该是这样:

  -Dloader.path=/Library/nacos/plugins/health, /Library/nacos//plugins/cmdb

  -Dnacos.home=/Library/nacos/ -jar /Library/nacos//target/nacos-server.jar 

 --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/Library/nacos//conf/

 --logging.config/Library/nacos//conf/nacos-logback.xml


3、如果安装uname,dirname,sed安装有问题

  粗暴的方法就是直接修改startup.sh脚本:

  export BASE_DIR=`cd $(dirname $0)/..; pwd` 改为:

  export BASE_DIR="/Library/nacos/"


  使用uname是为了获取系统信息,可以忽略。

  使用sed是为了获取java的版本是否java9,可以忽略。


回答的问题 #nacos启动报错,找了好多资料不知道什么原因
回答了问题于 6 月前

你在web.xml有没有指定路由,类似springMVC:

<servlet>

<servlet-name>apiserver2</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>


<servlet-mapping>

<servlet-name>apiserver</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>


回答的问题 #部署到阿里云里的maven项目全是class文件无法找到Servlet,另外一个项目javaweb项目的前端url写这个maven工程的后台servlet地址,没想到找不到 远程+Q
回答了问题于 6 月前

记录 Spring Boot2 启动报错The bean ‘beanNameViewResolver‘, defined in class path resource 解决过程

在必问里面帮忙回答一个网友的问题:https://biwen.csdn.net/question/4664一、问题现象Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2020-07-19 10:47:22.557 ERROR 7412 --- [main] o.s.b.d.LoggingFailure...
原创
3评论
4点赞
发布博客于 6 月前

专栏总结java9:MyBatis+hibernate

专栏总结java9:MyBatis+hibernate
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java13:springcloud

专栏总结java13:springcloud
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java12:springboot

专栏总结java12:springboot
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java11:Spring MVC

专栏总结java11:Spring MVC
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java10:Spring

专栏总结java10:Spring
原创
0评论
0点赞
发布博客于 5 月前

由于这里沟通确实不方便,如果可以,添加qq 275442185沟通,算是相互学习。



回答的问题 #mysql新增字段后无法加入 list数组里?
回答了问题于 6 月前

查问题的思路:

1、返回false,说明没有数据或者sql问题。

2、打印sql语句。

3、把sql语句在数据库执行一下,看看返回什么?

4、是不是连接数据库地址错了?

回答的问题 #mysql新增字段后无法加入 list数组里?
回答了问题于 6 月前

方便可以添加qq 275442185,算是相互学习。


回答的问题 #mysql新增字段后无法加入 list数组里?
回答了问题于 6 月前

你直接在循环里面打印$row,看看$row的内容。

var_dump($row);


回答的问题 #mysql新增字段后无法加入 list数组里?
回答了问题于 6 月前

你这个问题确实很奇怪,照理说,数据表的所有字段都能取到。

回答的问题 #mysql新增字段后无法加入 list数组里?
回答了问题于 6 月前

发生错误:npm ERR! code ELIFECYCLE,可以百度查一下,应该是nodejs依赖的问题,试试

先把项目copy到另外目录备份,然后执行:

rm -rf node_modules

rm package-lock.json

npm cache clear --force

npm install

然后再npm start看看


回答的问题 #前同事留下的nodejs+MongoDB项目在阿里云的服务器上运行的,那天另一个同事交给阿里云的技术人员去配置了下HTTPS的ssl证书后,原来的IP+端口访问的项目突然就不行了。因为我不懂这个,在网上查了半天(前同事处于失联状态),发现运行这个app.js文件报下面的错误,因为数据库的服务状态是开启着的。求大佬告知原
回答了问题于 6 月前

专栏总结java4:异常

专栏总结java4:异常
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java3:类接口相关

专栏总结java3:类接口相关
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java2:集合

专栏总结java2:集合
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java7:容器tomcat相关

专栏总结java7:jdk
原创
0评论
0点赞
发布博客于 5 月前

架构设计(14)-- 分布式链路跟踪:我们自研log2组件

自研的原因:1、定制化:和我们api网关 globalId关联。2、日志内容:日志内容一天大概是1T, 如果使用开源,日志量暴增10倍。3、选择哪些参数过滤,比如二进制图片参数过滤。
原创
0评论
1点赞
发布博客于 6 月前

架构设计(13)--分布式链路跟踪:skywalking原理和实践

本文总结网上的学习笔记目前分布式链路追踪系统基本都是根据谷歌的《Dapper大规模分布式系统的跟踪系统》这篇论文发展而来,主流的有zipkin,pinpoint,skywalking,cat,jaeger等。当企业应用进入分布式微服务时代,应用服务依赖会越来越多,skywalking可以很好的解决服务调用链路追踪的问题,而且基于java探针技术,基本对应用零侵入零耦合。skywalking中文文档skywalking完全由国人主导开发,在国内社区相当活跃。skywalking已成为 Ap.
原创
0评论
0点赞
发布博客于 6 月前

架构设计(12) --分布式链路跟踪:Zipkin实践

本文总结网上文章做修改:一、Zipkin是什么Zipkin分布式跟踪系统;它可以帮助收集时间数据,解决在microservice架构下的延迟问题;它管理这些数据的收集和查找;Zipkin的设计是基于谷歌的Google Dapper论文。每个应用程序向Zipkin报告定时数据,Zipkin UI呈现了一个依赖图表来展示多少跟踪请求经过了每个应用程序;如果想解决延迟问题,可以过滤或者排序所有的跟踪请求,并且可以查看每个跟踪请求占总跟踪时间的百分比。二、为什么使用Zipkin随着业务越来越.
原创
0评论
0点赞
发布博客于 6 月前

你ping一下mysql服务器,看看网络速度和丢包情况。


回答的问题 #mysql 查询速度异常
回答了问题于 7 月前

我的bind dns竟无法配置。





回答的问题 #域名解析的域名后缀问题
回答了问题于 7 月前

bind根域设置orderer-svc,应该不影响外网dns。

nameserver 192.168.1.44域名解析不了,就接着往下执行nameserver 192.168.1.1啊。


回答的问题 #域名解析的域名后缀问题
回答了问题于 7 月前

1、业务的具体场景是什么?

2、你的/etc/resolv.conf怎么设置呢?


回答的问题 #域名解析的域名后缀问题
回答了问题于 7 月前

你的业务场景是什么?是为了满足业务需求还是想测试bind域名解析规则?

回答的问题 #域名解析的域名后缀问题
回答了问题于 7 月前

1、bind的域名后缀可以使用任意标识,比如.local也可以:

2、要访问外网,新加外网nameserver

3、linux的dns解析顺序按/etc/resolv.conf文件来

比如本例如果nameserver 172.16.1.21无法解析,就接着nameserver 114.114.114.114来解析。


具体如下,比如新增后缀巍为.local的域名

1、添加一个区域local


2、添加域名:



3、设置linux的域名解析服务器:

需要添加两个nameserver

nameserver 172.16.1.21 是解析内网域名

nameserver 114.114.114.114 是解析外网域名


4、ping域名

回答的问题 #域名解析的域名后缀问题
回答了问题于 7 月前

1、搭建环境是在linux还是windows?

2、搭建dns软件是使用哪个?bind还是其他?

回答的问题 #域名解析的域名后缀问题
回答了问题于 7 月前

maven打包的时候会检查项目中的main方法,并设置为Spring boot 生成jar包的启动入口main,若有多个main方法,maven打包应该有异常啊


回答的问题 #我想执行jar包某个指定内的main方法,就一个普通的springboot用maven打包的jar,怎么执行也不成功 1、java -jar 能正常启动 2、通过java -cp xxx.jar 包名+className [args**] 执行的时候一直提示 3、jar 包里面肯定有这个类
回答了问题于 7 月前

提示什么错误

回答的问题 #我想执行jar包某个指定内的main方法,就一个普通的springboot用maven打包的jar,怎么执行也不成功 1、java -jar 能正常启动 2、通过java -cp xxx.jar 包名+className [args**] 执行的时候一直提示 3、jar 包里面肯定有这个类
回答了问题于 7 月前

你的UID字段是varchar类型吗?

回答的问题 #对数据表中的字段求和
回答了问题于 7 月前

uid字段应该是varchar类型,匹配的字符串需要加引号。

strsql="select sum(Amt) as al from `Order` where UID ='" + rs("ID") + "'"

回答的问题 #对数据表中的字段求和
回答了问题于 7 月前

q聊:275442185

回答的问题 #对数据表中的字段求和
回答了问题于 7 月前

改成这样:

1、Order需要使用反引号`` 就是英文输入法下,1左边的那个键。

2、uid字段应该是varchar类型,匹配的字符串需要加引号。

strsql="select sum(Amt) as al from `Order` where UID ='" + rs("ID") + "'"


回答的问题 #对数据表中的字段求和
回答了问题于 7 月前

Posted content type isn't multipart/form-data错误,说明你页面提交的数据有问题。在服务器可以使用tcpdump来抓包看看页面提交post的数据是什么?tcpdump tcp port 8080 -n -X -s 0 -w tcp.cap 。然后使用wireshark打开文件tcp.cap,可以看到客户端提交了什么数据,这些数据格式是不是和你xml配置有出入。

回答的问题 #服务器被攻击,导致配置正常得struts2文件无法使用正常得方法
回答了问题于 7 月前

如果实在不明白,可以加我qq 275442185来沟通交流。

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

http请求流程:

1) 建立tcp连接,即三次握手,即$s = stream_socket_client

2) 发送http请求数据, 使用fwrite函数:

  例如请求百度首页的http get请求格式:

  GET / HTTP/1.0\r\n

  Host: $host\r\n

  Accept: */*\r\n

  \r\n

3) 服务器返回结果:

  fread函数读取socket


回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

<?php

error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);

ini_set('display_errors', 1);

$hosts = array("www.baidu.com","www.baidu.com");

$timeout = 15;

$status = array();

$sockets = array();

foreach ($hosts as $id => $host) {

   $s = stream_socket_client("tcp://$host:80", $errno, $errstr, $timeout,

       STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);


   if ($s) {

       //建立tcp连接后,写入http请求数据,可以并发请求。

       fwrite($s, "GET / HTTP/1.0\r\nHost: $host\r\nAccept: */*\r\n\r\n");

       $sockets[$id] = $s;

       $status[$id] = "in progress";

   } else {

       $status[$id] = "failed, $errno $errstr";

   }

}


/* Now, wait for the results to come back in */

while (count($sockets)) {

   $read = $write = $sockets;

   $e=null;

   $n = stream_select($read, $write, $e,0);

   if ($n > 0) {

       /* readable sockets either have data for us, or are failed connection attempts */

       foreach ($read as $key=>$r) {

           $id = array_search($r, $sockets);

           $data = fread($r, 8192);

           if (strlen($data) == 0) {

               if ($status[$id] == "in progress") {

                   $status[$id] = "failed to connect";

               }

               fclose($r);

               unset($sockets[$id]);

           } else {

               $status[$id] .= $data;

           }

       }


   } else {

       /* timed out waiting; assume that all hosts associated

       * with $sockets are faulty */

       foreach ($sockets as $id => $s) {

           $status[$id] = "timed out " . $status[$id];

       }

       break;

   }


}


foreach ($hosts as $id => $host) {

   echo "Host: $host";

   echo "Status: " . $status[$id] . "nn";

   echo "==================end==================================";

}

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

<?php

error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);

ini_set('display_errors', 1);

$hosts = array("www.baidu.com");

$timeout = 15;

$status = array();

$sockets = array();

foreach ($hosts as $id => $host) {

   $s = stream_socket_client("tcp://$host:80", $errno, $errstr, $timeout,

       STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);

//    $s = fsockopen($host, 80);

   if ($s) {

       //fwrite($s, "GET /s?wd=stream_select HTTP/1.0\r\nHost: $host\r\nAccept: */*\r\n\r\n");

       $sockets[$id] = $s;

       $status[$id] = "in progress";

   } else {

       $status[$id] = "failed, $errno $errstr";

   }

}


/* Now, wait for the results to come back in */

while (count($sockets)) {

   $read = $write = $sockets;

   $e=null;

   //不论在php5.6还是php7.4版本,测试发现只触发$write事件,$read返回一直为空,这个需要从stream_select源码去研究原因。

   //目前今天还没有时间去看源码。

   $n = stream_select($read, $write, $e,0);


   if ($n > 0) {

       /* writeable sockets can accept an HTTP request */

       foreach ($write as $w) {

           if(!is_resource($w))continue;

           $id = array_search($w, $sockets);

           $host = $hosts[$id];

           $path = "/";

           $req .= "GET $path HTTP/1.1\r\n";

           $req .= "Host: $host\r\n";

           $req .= "\r\n";

           fwrite($w, $req);

           $status[$id] = "waiting for response";


       }


       /* readable sockets either have data for us, or are failed connection attempts */

       foreach ($read as $key=>$r) {

           $id = array_search($r, $sockets);

           $data = fread($r, 8192);

           if (strlen($data) == 0) {

               if ($status[$id] == "in progress") {

                   $status[$id] = "failed to connect";

               }

               fclose($r);

               unset($sockets[$id]);

           } else {

               $status[$id] .= $data;

           }

       }


   } else {

       /* timed out waiting; assume that all hosts associated

       * with $sockets are faulty */

       foreach ($sockets as $id => $s) {

           $status[$id] = "timed out " . $status[$id];

       }

       break;

   }


}


foreach ($hosts as $id => $host) {

   echo "Host: $host";

   echo "Status: " . $status[$id] . "nn";

}

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

第二参数在这段代码没有意义,但是如果你的并发http请求是post提交数据,这个$write就有意义,客户端可以同时提交数据并发请求。

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

1、stream_socket_client函数是和服务器建立连接,然后返回句柄fd。记住这个只是建立tcp连接。

  由于并发建立多个连接,建立连接的fd都放在 $sockets数组里面。

  假如本例:

  请求Client1的socket fd=5555

  请求Client2的socket fd=5556

  $sockets[0] = 5555

  $sockets[1] = 5556


2、stream_select会调用操作系统io函数select来工作,

  $read = $write = $sockets;

  select的机制:检查$read或者$write存放fd是否可以操作。

  比如$read,有数据就把$read的fd对应标志位设置为1,即通知应用层已经有数据可以读了。


3、然后就遍历$read的fd读取数据。

上面就达到了并发请求的目的。


不明白的我打个比方:

  1)、目的:从A5555,B5556两地搬砖回来,每个司机搬回来的砖头都是放在指定地方。

  2)、连接:你派两个司机fd1,fd2分别开车去获取:

   fd1 = stream_socket_client(A5555)

   fd2 = stream_socket_client (A5556)


  3)、select机制:这时你等待获取砖头,谁的卸载地(缓冲区)有砖头就通知你。

   即告诉两个司机,如果在timeout时间内运回砖头,那就把fd对应的标志位设置为1,

   即如果司机fd1运回砖头,fd1对应的标志位为1.

   注意的是stream_select参数:timeout一般是设置为0,即立即返回。


  4)、并行获取结果:

   轮训从fd1,fd2的所在的缓冲区获取砖头。


如果不是select机制,我们看看如何处理:

  1)、目的:从A5555,B5556两地搬砖回来,每个司机搬回来的砖头都是放在指定地方。

  1)、连接:你派两个司机fd1,fd2分别开车去获取:

   fd1 = stream_socket_client(A5555)

   fd2 = stream_socket_client (A5556)

  3)、直接获取结果:

   因为没人通知你缓冲区已经有数据,你只能串行执行。

   你只能从这两个卸载地(缓冲区)其中之一把砖头搬完再去另外地方搬砖。

   比如先在司机fd1的缓冲区搬砖完了,再去司机fd2的缓冲区搬砖。


  4) 结果就是串行获取。


回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

1、stream_socket_client函数是和服务器建立连接,然后返回句柄fd。

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

你要完全弄明白:1、了解网络知识:https://blog.csdn.net/hguisu/category_1075597.html 。2、了解系统io:https://blog.csdn.net/hguisu/article/details/7453390 和相关事件机制 https://blog.csdn.net/hguisu/article/details/38638183 ;3、了解socket编程:https://blog.csdn.net/hguisu/article/details/7444092

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

1、学习的话,我建议把基础知识学得扎实,php的stream_select函数调用系统函数select来实现,你要完全弄明白:

回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

只是学习用还是要在实际业务中用?


回答的问题 #php stream_select 以及其他流函数的用法
回答了问题于 7 月前

k8s实践(1)--k8s集群入门介绍和基础原理

一、Kubernetes简介1.1 Kubernetes简介Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S。K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。Kubernetes目标是让部署容器化应用简单高效。官方网站:www.ku...
原创
0评论
1点赞
发布博客于 7 月前

Spring Boot(5) @Async异步线程池详解

一. Spring异步线程池的接口类 :TaskExecutorSpring异步线程池的接口类,其实质是java.util.concurrent.ExecutorSpring 已经实现的异常线程池:1. SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。2. SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方3. ConcurrentTaskExecutor:Executor...
原创
0评论
0点赞
发布博客于 7 月前

架构设计(10) --分布式服务治理

服务治理离基于架构运维的devops平台,目前还没有完全迁移到k8s平台。一、项目和服务管理:1、项目命名规范2、项目记录:列出服务负责人及使用文档3、项目对应服务等级协定4、项目对应服务配置5、项目对应服务的层次6、服务管理:服务名称、端口号、启动命令、服务类型、日志说明服务划分层次:产品接入层: 直接对外提供服务,例如网站、API接口等。接入层不包含复杂的业务逻辑,只做呈现和转换。对应的项目类 型:openapi接口,platformweb,wechat,..
原创
0评论
2点赞
发布博客于 7 月前

架构设计(9)—高性能设计

一、性能指标1、响应时间指应用执行一个操作需要的时间,包括从发出请求开始到收到最后响应数据所需要的时间。响应时间是系统最重要的性能指标,直观地反映了系统的“快慢"。长远系统操作需要的响应时间。网络连接响应时间:1、本机的话,通信内容直接走内存。2、局域网走网卡,然后通过交换机,指定到相应主机。tcp建立3次握手,一般耗0.6毫秒左右。3、外网通过网卡->路由器->互联网。在外网,不同地域,网络耗时也不一样(经过的节点)。比如在深圳和北京访问北京阿里云:
原创
0评论
2点赞
发布博客于 7 月前

k8s实践(12)--K8s service服务详解

一、集群的服务分类在K8S运行的服务,从简单到复杂可以分成三类:无状态服务、普通有状态服务和有状态集群服务。下面分别来看K8S是如何运行这三类服务的。1、无状态服务(Stateless Service):1)定义:是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。2)随意扩容和缩容:这些节点可以随意扩容或者缩容,只要简单的增...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(8)--ssl安全认证配置

一.基于CA签名的双向数字证书认证方式在一个安全的内网环境中, Kubernetes的各个组件与Master之间可以通过apiserver的非安全端口http://apiserver:8080进行访问。但如果apiserver需要对外提供服务,或者集群中的某些容器也需要访问apiserver以获取集群中的某些信息,则更安全的做法是启用HTTPS安全机制。Kubernetes提供了基于CA签名的...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(10) -- 集群运行原理分析

1、Kubernetes API Server原理分析Kubernetes API Server的核心功能是提供了Kubernetes各类资源对象(如Pod、RC、Service等)的增、删、改、查及Watch等HTTP Rest接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽,是整个系统的数据总线和数据中心。除此之外,它还有以下一些功能特性:是集群管理的API入口。 是资源配额...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(6)--Kubernetes安全:API Server访问控制

Kubernetes安全安全永远是一个重大的话题,特别是云计算平台,更需要设计出一套完善的安全方案,以应对复杂的场景。 Kubernetes主要使用Docker作为应用承载环境,Kubernetes首先设计出一套API和敏感信息处理方案,当然也基于Docker提供容器安全控制。以下是Kubernetes的安全设计原则:1. 保证容器与其运行的宿主机之间有明确的隔离2. 限制容器对基础设施...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(11) --服务发现CoreDNS详解

参考:官方网站,https://coredns.io/ CoreDNS安装,https://my.oschina.net/u/2306127/blog/1618543 CoreDNS使用手册,https://coredns.io/manual/toc/ CoreDNS源码,https://github.com/coredns CoreDNS配置,https://my.oschina.n...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(9)--深入了解Pod

一、Pod简介 Pod是k8s系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展Pod对象功能的,比如控制器对象是用来管控Pod对象的,Service或者Ingress资源对象是用来暴露Pod引用对象的,PersistentVolume资源对象是用来为Pod提供存储等等,k8...
原创
0评论
1点赞
发布博客于 7 月前

k8s实践(7)- k8s Secrets

Secrets是Kubernetes中一种对象类型,用来保存密码、私钥、口令等敏感信息。与直接将敏感信息嵌入image、pod相比,Secrets更安全、更灵活,用户对敏感信息的控制力更强。同Docker对敏感信息的管理类似,首先用户创建Secrets将敏感信息加密后保存在集群中,创建pod时通过volume、环境变量引用Secrets。1. Secret类型Secret有三种类型:O...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(5)k8s的命名空间Namespace

1、什么是Namespace?你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织,安全甚至性能方面的帮助!“default” Namespace大多数的Kubernetes中的集群默认会有一个叫default的namespace。实际上,应该是3个:d...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(4)--k8s集群网络详解和flannel

一、Docker网络模式在讨论Kubernetes网络之前,让我们先来看一下Docker网络。Docker采用插件化的网络模式,默认提供bridge、host、none、overlay、maclan和Network plugins这几种网络模式,运行容器时可以通过–network参数设置具体使用那一种模式。bridge:这是Docker默认的网络驱动,此模式会为每一...
原创
2评论
0点赞
发布博客于 7 月前

k8s实践(3)--k8s集群安装详解

一、Kubernetes简介1.1 Kubernetes简介Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S。K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务...
原创
0评论
0点赞
发布博客于 7 月前

k8s实践(2) etcd集群安装

1、简介​ etcd是由CoreOS团队发的一个分布式一致性的KV存储系统,可用于服务注册发现和共享配置,随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个高可用强一致性的服务发现存储仓库,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一...
原创
0评论
0点赞
发布博客于 7 月前

docker实践(3) 仓库registry和Nexus3作为私有镜像仓库

1. docker安装并运行spring boot1.1 下载官方的 CentOS 镜像到本地必须先启动docker才能下载:docker pull centos1.2 运行一个 Docker 容器:[root@localhost~]#docker run-i-t centos/bin/bash[root@d
原创
0评论
0点赞
发布博客于 7 月前

docker实践(2)常用命令和DockerFile详解

1. 镜像相关命令1、获取:docker pull centos获取镜像 #从官方仓库注册服务器下载镜像 docker pull dl.dockerpool.com:5000/ubuntu:12.04指定完整的仓库注册服务器地址下载镜像。 docker search centos#搜索官方仓库注册服务器下的centos镜像 2、列出本地镜像:...
原创
0评论
0点赞
发布博客于 7 月前

docker实践(1) 入门和springBoot实践部署

一. 什么是docker Docker是一个开源项目,诞生于2013年初, 最初是 dotCloud 公司内部的一个业余项目。 它基于Google公司推出的Go语言实现。项目后来加入了Linux基金会, 遵从了 Apache 2.0 协议,项目代码在GitHub上进行维护。 Docker 自开源后受到广泛的关注和讨论, 以至于dotCloud公司后来都改名为D...
原创
0评论
2点赞
发布博客于 7 月前

架构设计(11)-- 分布式链路跟踪

自研的原因:1、定制化:和我们api网关 globalId关联。2、日志内容:日志内容一天大概是1T, 如果使用开源,日志量暴增10倍。3、选择哪些参数过滤,比如二进制图片参数过滤。
原创
0评论
0点赞
发布博客于 6 月前

构建知识体系(3):建立体系6个步骤

网络文章总结:1、为什么要构建知识体系如果想真正地开始读一本书,一定要明白自己的阅读动机并发现兴趣点。建立个人知识体系的第一步是,学会提问。你要建立什么样的知识体系?你想达到什么样的目的和效果?你关注了哪些领域?你对哪些方面比较感兴趣呢?比如时间管理,阅读,写作,手绘,美食,健身,心理咨询……你要明白自己的兴趣爱好点在哪,正如我们阅读时强调的,必须带有目的性,选择自己感兴趣的进行阅...
原创
0评论
2点赞
发布博客于 8 月前

构建知识体系(2):如何构建

构建原则:要做到系统化、流程化、可视化三点。构建方法:这也是从道、法、术、器、势的角度去全面解决问题。“道”:确定目标方向“法”: 制定规则“术”:方法路径“势”:执行力“器”:工具一、系统化(道·法·势)通过系统地规定,明确方向、准则来建立知识消化系统,保证构建过程处于正常的轨道,并不断前进。 (确定理念、方向即是道;掌握规律、准则既是法;顺应趋势、自然既是...
原创
2评论
1点赞
发布博客于 8 月前

构建知识体系(1):知识体系是什么?

理论也有理论存在的意义:反复咀嚼让它们烂熟于心,有认知才能有觉察,有理念才能有提醒。
原创
0评论
4点赞
发布博客于 8 月前

专栏总结java8:Socket编程 nio

专栏总结java8:Socket编程 nio
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java5:线程/多线程并发

专栏总结java5:线程/多线程并发
原创
0评论
1点赞
发布博客于 5 月前

专栏总结java6:jvm

专栏总结java6:jvm
原创
0评论
0点赞
发布博客于 5 月前

架构师成长之路(5)--架构师具备的思维

一个思维习惯,让你成为架构师程序员的迷茫不仅仅是面对技术繁杂的无力感,更重要的是因为长期埋没于软件 世界的浩大的分工体系中,无法看清从业务到软件架构的价值链条,无法清楚定位自 己在分工体系的位置,处理不好自身与技术、业务的关系所致。很多程序员打心底不喜欢业务,这一点我曾经也经历过,我更宁愿从事框架工 具、技术组件研究的相关事情。我有个朋友经常吐槽我说:”你们天天加班加点写了 那么多代码,然...
原创
0评论
5点赞
发布博客于 1 年前

DevOps-深入浅出(超详细)

提到DevOps这个词,我相信很多人一定不会陌生。作为一个热门的概念,DevOps近年来频频出现在各大技术社区和媒体的文章中,备受行业大咖的追捧,也吸引了很多吃瓜群众的围观。那么,DevOps是什么呢?有人说它是一种方法,也有人说它是一种工具,还有人说它是一种思想。更有甚者,说它是一种哲学。越说越玄乎,感觉都要封神啦!DevOps这玩意真的有那么夸张吗?它到底是干嘛用的?为什么行业...
原创
2评论
3点赞
发布博客于 5 月前

专栏总结:场景实践

专栏总结:场景实践
原创
0评论
1点赞
发布博客于 5 月前

专栏总结7:中间件Nginx、消息队列

专栏总结7:中间件Nginx、消息队列
原创
0评论
0点赞
发布博客于 5 月前

专栏总结3:操作系统和计算机原理

专栏总结3:操作系统和计算机原理
原创
0评论
0点赞
发布博客于 5 月前

专栏总结:架构设计总结

专栏总结:架构设计总结
原创
0评论
0点赞
发布博客于 5 月前

专栏总结1:基础网络相关

请不要付费,只是把历史笔记发布,包含专栏内容总结。专栏总结1:基础网络相关专栏总结2:数据结构和算法专栏总结3:操作系统和计算机原理专栏总结4:Linux和linux内核专栏总结5:mysql相关专栏总结6:redis相关专栏总结7:中间件Nginx、消息队列专栏总结java1:类型和String、反射专栏总结java2:集合专栏总结java3:类接口相关专栏总结java4:异常专栏总结java5:线程/多线程并发专栏总结java6:jvm专栏总结java7:jdk专栏总结java8:Socket.
原创
0评论
2点赞
发布博客于 5 月前

专栏总结2:数据结构和算法

专栏总结2:数据结构和算法
原创
0评论
0点赞
发布博客于 5 月前

专栏总结6:redis相关

专栏总结6:redis相关
原创
0评论
0点赞
发布博客于 5 月前

专栏总结5:mysql相关

专栏总结5:mysql相关
原创
0评论
0点赞
发布博客于 5 月前

专栏总结java1:类型和String、反射

专栏总结java1:类型和String、反射
原创
0评论
0点赞
发布博客于 5 月前

Linux服务器性能评估与优化(四)--网络

之前文章《Linux服务器性能评估与优化(一)》太长,阅读不方便,因此拆分成系列博文:《Linux服务器性能评估与优化(一)--CPU》《Linux服务器性能评估与优化(二)--内存》《Linux服务器性能评估与优化(三)--磁盘i/o》《Linux服务器性能评估与优化(四)--网络》《Linux服务器性能评估与优化(五)--内核参数》1、网络性能评估网络是所有...
原创
2评论
16点赞
发布博客于 2 年前

Linux服务器性能评估与优化(三)--磁盘i/o

之前文章《Linux服务器性能评估与优化(一)》太长,阅读不方便,因此拆分成系列博文:《Linux服务器性能评估与优化(一)--CPU》《Linux服务器性能评估与优化(二)--内存》《Linux服务器性能评估与优化(三)--磁盘i/o》《Linux服务器性能评估与优化(四)--网络》《Linux服务器性能评估与优化(五)--内核参数》前言、磁盘基础知识彻底...
原创
0评论
3点赞
发布博客于 2 年前

Linux服务器性能评估与优化(二)--内存

之前文章《Linux服务器性能评估与优化(一)》太长,阅读不方便,因此拆分成系列博文:《Linux服务器性能评估与优化(一)--CPU》《Linux服务器性能评估与优化(二)--内存》《Linux服务器性能评估与优化(三)--磁盘i/o》《Linux服务器性能评估与优化(四)--网络》《Linux服务器性能评估与优化(五)--内核参数》1、虚拟内存简介 ...
原创
2评论
5点赞
发布博客于 2 年前

专栏总结4:Linux和linux内核

专栏总结4:Linux和linux内核
原创
0评论
0点赞
发布博客于 5 月前

架构师成长之路(6)--技术深度和广度

一、技术的深度说到技术深度,深到底多深才叫有深度,是不是技术钻研的越就显得越牛逼,那学一门技术要怎么学才叫有深度的学?学任何的知识都要形成一个体系,才能学得深,记得牢。功利性地,走马观花似的学习,很快就会忘记。1、学习层次认知我们先看看加涅定义学习的层次:陌生——辨别——概念——规则(方法,套路等)——高级规则(解决问题)。对应到我们技术,在我们技术简历上面,经常出现...
原创
0评论
9点赞
发布博客于 2 年前

Redis详解(7)性能监控:问题分析和优化

对于任何应用服务和组件,都需要一套完善可靠谱监控方案。尤其redis这类敏感的纯内存、高并发和低延时的服务,一套完善的监控告警方案,是精细化运营的前提。一、Redis监控告警的价值redis故障快速通知,定位故障点;对于DBA,redis的可用性和性能故障需快速发现和定位解决。分析redis故障的Root causeredis容量规划和性能管理redis硬件资源利用率和成本...
原创
0评论
1点赞
发布博客于 2 年前

Redis详解(5)常见问题和解决方法

1、Redis Master 数据库 性能调优  1.Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。  2.Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢...
原创
0评论
1点赞
发布博客于 2 年前

redis cluster(6)- redis集群应用和问题总结

问1、问题:1、新加节点,如果没有分配slot,没有执行redis-trib.rb reshard,java的java.lang.IllegalArgumentException: Node 10.31.145.246:7032 is unknown to cluster解决:新加节点需要执行reshard2、10.46.65.34[ERR] Not all 16384 slo...
原创
0评论
2点赞
发布博客于 2 年前

redis cluster(5)- redis集群原理

https://www.jianshu.com/p/0232236688c11、集群架构Redis集群设计总体架构在这个图中,每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。集群节点属性集群中每个Master node负责存储数据、集群状态...
原创
6评论
5点赞
发布博客于 2 年前

redis-cluster(4)redis集群管理工具:redis-trib.rb详解

redis cluster管理工具redis-trib.rb详解redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。redis-trib.rb是redis作者用ruby完成的。为了看懂redis-trib.rb,我特意花了一个星期学习了ruby,也被ruby的简洁、明了所...
原创
0评论
1点赞
发布博客于 2 年前

redis cluster(3)- redis集群管理:伸缩,故障

redis安装详见安装文档,目前部署3.2.3,不同版本并不一定能够兼容#安装文档:http://gitlab.tuling123.com/docs/openDocs/wikis/op-redis-in[root@tuling10-80-82-74 redis-3.2.3]# redis-cli --versionredis-cli 3.2.31、新增节点:增加节点的顺序是...
原创
0评论
1点赞
发布博客于 2 年前

redis cluster(2)- redis集群常用命令

集群(cluster) :这些命令是集群所独有的。执行上述命令要先登录#查看redis集群信息:redis-cli -c -p 6379 cluster nodes或者redis-trib.rb check 10.26.25.115:6379redis-trib.rb info 10.26.25.115:63791、查看集群:CLUSTERINFO打印集群的信...
原创
3评论
3点赞
发布博客于 2 年前

redis cluster(1)-redis集群安装配置详解

总结:1、简介Redis Cluster是一个高性能高可用的分布式系统。由多个Redis实例组成的整体,数据按照Slot存储分布在多个Redis实例上,通过Gossip协议来进行节点之间通信。1.1Redis集群核心的目标:在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:1、性能:这是Redis赖以生存的看家...
原创
0评论
0点赞
发布博客于 2 年前