diff --git a/README.md b/README.md index f02c688..bdbcf47 100644 --- a/README.md +++ b/README.md @@ -567,7 +567,9 @@ - [C2C电商系统微服务架构120天实战训练营](docs/c2c/REAME.md) +## 100讲带你实战基于Redis的高并发预约抢购系统 +https://www.jianguoyun.com/p/DWwZ52oQtPiaCRjDg-AD (访问密码:ruyuan) diff --git a/docs/c2c/37.md b/docs/c2c/37.md new file mode 100644 index 0000000..ad5c5dc --- /dev/null +++ b/docs/c2c/37.md @@ -0,0 +1,18 @@ +#《37_微服务化的系统是如何发生服务雪崩的?》 + + +雪崩、熔断、限流、降级 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/38.md b/docs/c2c/38.md new file mode 100644 index 0000000..1e10319 --- /dev/null +++ b/docs/c2c/38.md @@ -0,0 +1,19 @@ + +#《38_为什么微服务化的系统需要进行限流和熔断?》 + + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/39.md b/docs/c2c/39.md new file mode 100644 index 0000000..cde60e1 --- /dev/null +++ b/docs/c2c/39.md @@ -0,0 +1,24 @@ +#《39_Sentinel、Hystrix等技术的选型对比》 + + +Spring Cloud Netflix,Hystrix这个项目,功能层面还是挺好用的,但是他的源码写的特别的烂,运用了特别奇怪的代码方式,源码,架构班,sprin cloud netflix源码剖析的课程里面,我深入分析过hystrix的源码的 + +Spring Cloud Alibaba,Sentinel这个项目 + +https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/40.md b/docs/c2c/40.md new file mode 100644 index 0000000..f180d04 --- /dev/null +++ b/docs/c2c/40.md @@ -0,0 +1,25 @@ + +#《40_SpringCloudAlibaba之Sentinel限流熔断框架》 + + +Spring Cloud Netflix,Hystrix这个项目,功能层面还是挺好用的,但是他的源码写的特别的烂,运用了特别奇怪的代码方式,源码,架构班,sprin cloud netflix源码剖析的课程里面,我深入分析过hystrix的源码的 + +Spring Cloud Alibaba,Sentinel这个项目 + +https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/41.md b/docs/c2c/41.md new file mode 100644 index 0000000..a661555 --- /dev/null +++ b/docs/c2c/41.md @@ -0,0 +1,32 @@ +#《41_SpringCloudAlibaba之Sentinel框架原理》 + + +授人以渔 + +看一个新的技术,首先是先了解他的一个基本的介绍,包括他的定位、功能、特性、问题;了解一下他是怎么用起来的,看一下他最最基本的一些demo,引入依赖、注解/代码/配置、功能 + +看看官网的技术文档,了解一下他基本的工作原理,看看这个技术假设在一个最基本的demo的指引下,集成和整合到你的项目里去以后,用起来了,用了他的一些功能了,解决了一些问题了,这背后基本的原理是什么 + +对阻塞线程数的控制 + 熔断 + 降级,解决了服务雪崩的问题 + +Spring Cloud Netflix,Hystrix这个项目,功能层面还是挺好用的,但是他的源码写的特别的烂,运用了特别奇怪的代码方式,源码,架构班,sprin cloud netflix源码剖析的课程里面,我深入分析过hystrix的源码的 + +Spring Cloud Alibaba,Sentinel这个项目 + +https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/42.md b/docs/c2c/42.md new file mode 100644 index 0000000..24576bd --- /dev/null +++ b/docs/c2c/42.md @@ -0,0 +1,33 @@ + +#《42_C2C电商社会化治理平台基于Sentinel实现限流》 + + +授人以渔 + +看一个新的技术,首先是先了解他的一个基本的介绍,包括他的定位、功能、特性、问题;了解一下他是怎么用起来的,看一下他最最基本的一些demo,引入依赖、注解/代码/配置、功能 + +看看官网的技术文档,了解一下他基本的工作原理,看看这个技术假设在一个最基本的demo的指引下,集成和整合到你的项目里去以后,用起来了,用了他的一些功能了,解决了一些问题了,这背后基本的原理是什么 + +对阻塞线程数的控制 + 熔断 + 降级,解决了服务雪崩的问题 + +Spring Cloud Netflix,Hystrix这个项目,功能层面还是挺好用的,但是他的源码写的特别的烂,运用了特别奇怪的代码方式,源码,架构班,sprin cloud netflix源码剖析的课程里面,我深入分析过hystrix的源码的 + +Spring Cloud Alibaba,Sentinel这个项目 + +https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/43.md b/docs/c2c/43.md new file mode 100644 index 0000000..10bf16d --- /dev/null +++ b/docs/c2c/43.md @@ -0,0 +1,32 @@ +#《43_C2C电商社会化治理平台基于Sentinel实现资源隔离》 + + +授人以渔 + +看一个新的技术,首先是先了解他的一个基本的介绍,包括他的定位、功能、特性、问题;了解一下他是怎么用起来的,看一下他最最基本的一些demo,引入依赖、注解/代码/配置、功能 + +看看官网的技术文档,了解一下他基本的工作原理,看看这个技术假设在一个最基本的demo的指引下,集成和整合到你的项目里去以后,用起来了,用了他的一些功能了,解决了一些问题了,这背后基本的原理是什么 + +对阻塞线程数的控制 + 熔断 + 降级,解决了服务雪崩的问题 + +Spring Cloud Netflix,Hystrix这个项目,功能层面还是挺好用的,但是他的源码写的特别的烂,运用了特别奇怪的代码方式,源码,架构班,sprin cloud netflix源码剖析的课程里面,我深入分析过hystrix的源码的 + +Spring Cloud Alibaba,Sentinel这个项目 + +https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/44.md b/docs/c2c/44.md new file mode 100644 index 0000000..85828a9 --- /dev/null +++ b/docs/c2c/44.md @@ -0,0 +1,33 @@ + +#《44_C2C电商社会化治理平台基于Sentinel实现熔断保护》 + + +授人以渔 + +看一个新的技术,首先是先了解他的一个基本的介绍,包括他的定位、功能、特性、问题;了解一下他是怎么用起来的,看一下他最最基本的一些demo,引入依赖、注解/代码/配置、功能 + +看看官网的技术文档,了解一下他基本的工作原理,看看这个技术假设在一个最基本的demo的指引下,集成和整合到你的项目里去以后,用起来了,用了他的一些功能了,解决了一些问题了,这背后基本的原理是什么 + +对阻塞线程数的控制 + 熔断 + 降级,解决了服务雪崩的问题 + +Spring Cloud Netflix,Hystrix这个项目,功能层面还是挺好用的,但是他的源码写的特别的烂,运用了特别奇怪的代码方式,源码,架构班,sprin cloud netflix源码剖析的课程里面,我深入分析过hystrix的源码的 + +Spring Cloud Alibaba,Sentinel这个项目 + +https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D + +雪崩、隔离、熔断、降级、限流 + + +Tomcat收到的每一个HTTP请求,都会交给一个独立的工作线程去处理,独立的工作线程一般可以配置为100~500之间的数量,看的是你的CPU有几个核,支持的线程数量就越多,4核,线程数量在200~300之间 + + +spring mvc、struts2这样的mvc框架,框架一般会把自己的servlet/filter配置在tomcat里面,tomcat就会把http请求交给mvc框架的servlet/filter,mvc框架就开始执行,处理请求 + + +mvc框架往往会扫描到你加了@Controller注解的类,扫描你里面的@Mapping注解,看看这个请求的URL路径格式和@Mapping注解里的指定的URL格式来做一个匹配,会把请求交给你的类里面的方法来处理 + + + +微服务之间调用的一个线程模型了解清楚,任何请求在分布式系统里执行,每个服务里都有一个线程会去处理这个请求 + diff --git a/docs/c2c/45.md b/docs/c2c/45.md new file mode 100644 index 0000000..78d98fe --- /dev/null +++ b/docs/c2c/45.md @@ -0,0 +1 @@ +#《45_为什么微服务化的系统需要一个配置中心?》 diff --git a/docs/c2c/47.md b/docs/c2c/47.md new file mode 100644 index 0000000..b009b96 --- /dev/null +++ b/docs/c2c/47.md @@ -0,0 +1,26 @@ +#《47_携程开源的Apollo配置中心的原理介绍》 + +spring cloud netflix 跟 spring cloud alibaba + +服务注册中心,就很多种技术选型;分布式事务,也是很多种框架;sentinel和hystrix,能干的事情类似;配置中心领域,携程开源了一款apollo,spring cloud config,nacos本身是一个服务注册中心但是也带了配置中心的功能 + + +进行技术选型,首先当然应该是站在一个细化的角度,从各个方面去对比技术,sentinel和hystrix对比,apollo nacos spring cloud config选型对比,马上就出来博客,他们都可以用表格给你展示的很清晰 + + +哪个技术最热门,用的人最多,那么你就选用那个技术;都很热门,用的人都多,怎么选呢?分场景,每种技术适合什么场景;分公司,每种技术适合小公司还是大公司;RabbitMQ、RocketMQ、Kafka如何选型对比 + + +apollo,架构是比较复杂,比较完善的,功能上也很完善,活跃,并不一定中小型公司去使用apollo,spring cloud alibaba,nacos,nacos作为一个服务注册中心本身就包含了配置中心的功能,没必要花很多时间再去部署一套apollo + + +可以考虑用apollo,把配置这块的功能和架构都抽取出来了 + +spring cloud config,如果你用的不是spring cloud alibaba,用的是spring cloud netflix,那么你可以配合那个技术栈,直接用spring cloud提供的config项目作为配置中心就可以了,因为这是属于spring cloud原生技术栈里提供的 + + +nacos完全可以满足很多中小型公司的配置中心的需求,哪怕是大公司也可以用的,apollo确实用的公司很多,中大型公司都会去用apollo,而且他的功能很完善的,讲,还是讲apollo,nacos + +https://github.com/ctripcorp/apollo + + diff --git a/docs/c2c/48.md b/docs/c2c/48.md new file mode 100644 index 0000000..15851b5 --- /dev/null +++ b/docs/c2c/48.md @@ -0,0 +1,26 @@ +#《48_Apollo配置中心的内核原理深度解析》 + +spring cloud netflix 跟 spring cloud alibaba + +服务注册中心,就很多种技术选型;分布式事务,也是很多种框架;sentinel和hystrix,能干的事情类似;配置中心领域,携程开源了一款apollo,spring cloud config,nacos本身是一个服务注册中心但是也带了配置中心的功能 + + +进行技术选型,首先当然应该是站在一个细化的角度,从各个方面去对比技术,sentinel和hystrix对比,apollo nacos spring cloud config选型对比,马上就出来博客,他们都可以用表格给你展示的很清晰 + + +哪个技术最热门,用的人最多,那么你就选用那个技术;都很热门,用的人都多,怎么选呢?分场景,每种技术适合什么场景;分公司,每种技术适合小公司还是大公司;RabbitMQ、RocketMQ、Kafka如何选型对比 + + +apollo,架构是比较复杂,比较完善的,功能上也很完善,活跃,并不一定中小型公司去使用apollo,spring cloud alibaba,nacos,nacos作为一个服务注册中心本身就包含了配置中心的功能,没必要花很多时间再去部署一套apollo + + +可以考虑用apollo,把配置这块的功能和架构都抽取出来了 + +spring cloud config,如果你用的不是spring cloud alibaba,用的是spring cloud netflix,那么你可以配合那个技术栈,直接用spring cloud提供的config项目作为配置中心就可以了,因为这是属于spring cloud原生技术栈里提供的 + + +`nacos`完全可以满足很多中小型公司的配置中心的需求,哪怕是大公司也可以用的,apollo确实用的公司很多,中大型公司都会去用apollo,而且他的功能很完善的,讲,还是讲apollo,nacos + +https://github.com/ctripcorp/apollo + + diff --git a/docs/c2c/49.md b/docs/c2c/49.md new file mode 100644 index 0000000..c5b828b --- /dev/null +++ b/docs/c2c/49.md @@ -0,0 +1,26 @@ +#《49_对Apollo配置中心进行分布式架构部署》 + +spring cloud netflix 跟 spring cloud alibaba + +服务注册中心,就很多种技术选型;分布式事务,也是很多种框架;sentinel和hystrix,能干的事情类似;配置中心领域,携程开源了一款apollo,spring cloud config,nacos本身是一个服务注册中心但是也带了配置中心的功能 + + +进行技术选型,首先当然应该是站在一个细化的角度,从各个方面去对比技术,sentinel和hystrix对比,apollo nacos spring cloud config选型对比,马上就出来博客,他们都可以用表格给你展示的很清晰 + + +哪个技术最热门,用的人最多,那么你就选用那个技术;都很热门,用的人都多,怎么选呢?分场景,每种技术适合什么场景;分公司,每种技术适合小公司还是大公司;RabbitMQ、RocketMQ、Kafka如何选型对比 + + +apollo,架构是比较复杂,比较完善的,功能上也很完善,活跃,并不一定中小型公司去使用apollo,spring cloud alibaba,nacos,nacos作为一个服务注册中心本身就包含了配置中心的功能,没必要花很多时间再去部署一套apollo + + +可以考虑用apollo,把配置这块的功能和架构都抽取出来了 + +spring cloud config,如果你用的不是spring cloud alibaba,用的是spring cloud netflix,那么你可以配合那个技术栈,直接用spring cloud提供的config项目作为配置中心就可以了,因为这是属于spring cloud原生技术栈里提供的 + + +`nacos`完全可以满足很多中小型公司的配置中心的需求,哪怕是大公司也可以用的,apollo确实用的公司很多,中大型公司都会去用apollo,而且他的功能很完善的,讲,还是讲apollo,nacos + +https://github.com/ctripcorp/apollo + + diff --git a/docs/c2c/50.md b/docs/c2c/50.md new file mode 100644 index 0000000..cde106d --- /dev/null +++ b/docs/c2c/50.md @@ -0,0 +1,26 @@ +#《50_在C2C电商社会化治理平台中引入Apollo配置中心》 + +spring cloud netflix 跟 spring cloud alibaba + +服务注册中心,就很多种技术选型;分布式事务,也是很多种框架;sentinel和hystrix,能干的事情类似;配置中心领域,携程开源了一款apollo,spring cloud config,nacos本身是一个服务注册中心但是也带了配置中心的功能 + + +进行技术选型,首先当然应该是站在一个细化的角度,从各个方面去对比技术,sentinel和hystrix对比,apollo nacos spring cloud config选型对比,马上就出来博客,他们都可以用表格给你展示的很清晰 + + +哪个技术最热门,用的人最多,那么你就选用那个技术;都很热门,用的人都多,怎么选呢?分场景,每种技术适合什么场景;分公司,每种技术适合小公司还是大公司;RabbitMQ、RocketMQ、Kafka如何选型对比 + + +apollo,架构是比较复杂,比较完善的,功能上也很完善,活跃,并不一定中小型公司去使用apollo,spring cloud alibaba,nacos,nacos作为一个服务注册中心本身就包含了配置中心的功能,没必要花很多时间再去部署一套apollo + + +可以考虑用apollo,把配置这块的功能和架构都抽取出来了 + +spring cloud config,如果你用的不是spring cloud alibaba,用的是spring cloud netflix,那么你可以配合那个技术栈,直接用spring cloud提供的config项目作为配置中心就可以了,因为这是属于spring cloud原生技术栈里提供的 + + +`nacos`完全可以满足很多中小型公司的配置中心的需求,哪怕是大公司也可以用的,apollo确实用的公司很多,中大型公司都会去用apollo,而且他的功能很完善的,讲,还是讲apollo,nacos + +https://github.com/ctripcorp/apollo + + diff --git a/docs/c2c/51.md b/docs/c2c/51.md new file mode 100644 index 0000000..6183bc0 --- /dev/null +++ b/docs/c2c/51.md @@ -0,0 +1,26 @@ +#《51_如何让Apollo配置中心实现多环境配置隔离?》 + +spring cloud netflix 跟 spring cloud alibaba + +服务注册中心,就很多种技术选型;分布式事务,也是很多种框架;sentinel和hystrix,能干的事情类似;配置中心领域,携程开源了一款apollo,spring cloud config,nacos本身是一个服务注册中心但是也带了配置中心的功能 + + +进行技术选型,首先当然应该是站在一个细化的角度,从各个方面去对比技术,sentinel和hystrix对比,apollo nacos spring cloud config选型对比,马上就出来博客,他们都可以用表格给你展示的很清晰 + + +哪个技术最热门,用的人最多,那么你就选用那个技术;都很热门,用的人都多,怎么选呢?分场景,每种技术适合什么场景;分公司,每种技术适合小公司还是大公司;RabbitMQ、RocketMQ、Kafka如何选型对比 + + +apollo,架构是比较复杂,比较完善的,功能上也很完善,活跃,并不一定中小型公司去使用apollo,spring cloud alibaba,nacos,nacos作为一个服务注册中心本身就包含了配置中心的功能,没必要花很多时间再去部署一套apollo + + +可以考虑用apollo,把配置这块的功能和架构都抽取出来了 + +spring cloud config,如果你用的不是spring cloud alibaba,用的是spring cloud netflix,那么你可以配合那个技术栈,直接用spring cloud提供的config项目作为配置中心就可以了,因为这是属于spring cloud原生技术栈里提供的 + + +`nacos`完全可以满足很多中小型公司的配置中心的需求,哪怕是大公司也可以用的,apollo确实用的公司很多,中大型公司都会去用apollo,而且他的功能很完善的,讲,还是讲apollo,nacos + +https://github.com/ctripcorp/apollo + + diff --git a/docs/c2c/52.md b/docs/c2c/52.md new file mode 100644 index 0000000..2935674 --- /dev/null +++ b/docs/c2c/52.md @@ -0,0 +1,10 @@ +#《52_为什么微服务化的系统要需要一个监控中心?》 + +很多系统平时上线了以后,似乎就是咔咔的跑着,好像你也没有去关注他,如果没人反馈bug给你,你似乎根本就不去care他 + +线上系统,可能产生的三个层面的问题: + +* 1、机器资源的层面:cpu、内存、网络、磁盘、io,出现了负载过高的问题 +* 2、JVM进程的层面:jvm内部各个区域的内存使用以及gc频率 +* 3、代码层面:代码逻辑的内部,抛异常,出现一些不希望发生的系统异常 + diff --git a/docs/c2c/53.md b/docs/c2c/53.md new file mode 100644 index 0000000..4ce41ba --- /dev/null +++ b/docs/c2c/53.md @@ -0,0 +1,16 @@ +#《53_Zabbix、Falcon、Prometheus的选型对比》 + +2015~2016年左右以及之前,国内比较多的用的是Zabbix这个国外开源的监控系统,直接部署做一些配置,就可以让他去监控你的各个服务器以及部署的服务实例了;Facon,做的还是比较好的;2018~2019再往后推,基本上跟着微服务体系,一般监控中心国外和国内,最火的,用的比较多的就是Prometheus + +很多系统平时上线了以后,似乎就是咔咔的跑着,好像你也没有去关注他,如果没人反馈bug给你,你似乎根本就不去care他 + +线上系统,可能产生的三个层面的问题: + +* 1、机器资源的层面:cpu、内存、网络、磁盘、io,出现了负载过高的问题 +* 2、JVM进程的层面:jvm内部各个区域的内存使用以及gc频率 +* 3、代码层面:代码逻辑的内部,抛异常,出现一些不希望发生的系统异常 + +但凡是线上的系统,配置中心、分布式事务、sentinel dashboard都可以不用,主要把服务注册中心和rpc框架搞好,一套服务之间RPC调用组成的一套系统能上线就可以了,可以跑起来了,但是监控中心是必须要有的 + + + diff --git a/docs/c2c/54.md b/docs/c2c/54.md new file mode 100644 index 0000000..6a72391 --- /dev/null +++ b/docs/c2c/54.md @@ -0,0 +1,14 @@ +#《54_Prometheus的整体架构设计以及原理介绍》 + +在你要监控的服务器上部署exporters,比如node_exporter就是基于linux内核写的,专门收集机器的cpu、内存、网络、io、磁盘的资源使用情况,然后prometheus server就可以从exporters拉取metrics过来存储和展示,以及进行报警 + +除此之外,对什么mysql,redis之类的中间件,都有对应的exporter,你自己也可以写exporter,按照他的标准写就行了 + +还有一种,就是有一个pushgateway,可以让你直接推送metrics给他,比如你系统的一些业务指标监控,就可以走这种方式 + +然后prometheus server可以把拉取到的metrics存储到本地磁盘去,基于TSDB进行时序数据的存储,也会自动的清理旧数据,保留最新数据,TSDB是时间序列数据库,尤为适合这种监控指标的存储,按时间来存储 + +定时查询配置好的报警规则,如果发现metric满足规则,就把alert发送到alertmanager去,此时会通过钉钉了、email了、短信之类的方式去对你进行告警 + +如果要能够可视化的查看metric监控报表,一般是基于Grafana可视化系统来进行的,Grafana天然支持对接prometheus,专门是做指标可视化的,很方便使用,需要独立进行部署,不然他自己也有Prometheus Web UI,可以基于他的PromQL查询语句去查询 + diff --git a/docs/c2c/55.md b/docs/c2c/55.md new file mode 100644 index 0000000..37095d4 --- /dev/null +++ b/docs/c2c/55.md @@ -0,0 +1,38 @@ +#《55_基于Prometheus实现系统的指标监控以及告警》 + +具体部署不用演示了,因为比较简单,给一下步骤就行 + +上prometheus官网下载 + +```shell +#prometheus-2.4.0.linux-amd64.tar.gz + +tar -zxvf prometheus-2.4.0.linux-amd64.tar.gz -C /data +cd /data +chown -R root:root prometheus-2.4.0.linux-amd64 +ln -sv prometheus-2.4.0.linux-amd64 prometheus + +cd /data/prometheus +./prometheus +``` + +直接访问本机的9090端口号,就能看到prometheus的web ui + +接着就是对要监控的机器去部署node exporter,是基于go语言写的,可以拿到cpu、内存、磁盘空间、磁盘io、网络带宽、系统负载、主板温度等一系列的机器资源监控指标,这个是最基本要做的监控 + +在`https://prometheus.io/download/`里面找到node exporter的下载地址,下载一个最新的版本,接着进行解压缩,直接./node_exporter运行起来,就O了,默认的监听端口是9100,然后再把这个node exporter跟prometheus集成起来 + +编辑prometheus的配置文件,有一个prometheus.yml,里面需要加入job去跟node_exporter进行集成 + +```yaml +scrape_configs: +- job_name: ‘prometheus’ + static_configs: + -targets: [‘192.168.xx.xx:9090’] +- job_name: ‘xx_node_exporter’ + static_configs: + -targets: [‘192.168.xx.xx:9100’] +``` + +重启prometheus server就可以了,直接进入web ui就可以在targets里找到你要监控的机器,然后里面各项资源监控报表都可以看到了 + diff --git a/docs/c2c/56.md b/docs/c2c/56.md new file mode 100644 index 0000000..ac11cbd --- /dev/null +++ b/docs/c2c/56.md @@ -0,0 +1,48 @@ +#《56_C2C电商社会化治理平台的监控体系设计》 + +具体部署不用演示了,因为比较简单,给一下步骤就行 + +```shell +#prometheus-2.4.0.linux-amd64.tar.gz + +tar -zxvf prometheus-2.4.0.linux-amd64.tar.gz -C /data +cd /data +chown -R root:root prometheus-2.4.0.linux-amd64 +ln -sv prometheus-2.4.0.linux-amd64 prometheus + +cd /data/prometheus +./prometheus +``` + +直接访问本机的9090端口号,就能看到prometheus的web ui + +接着就是对要监控的机器去部署node exporter,是基于go语言写的,可以拿到cpu、内存、磁盘空间、磁盘io、网络带宽、系统负载、主板温度等一系列的机器资源监控指标,这个是最基本要做的监控 + +在https://prometheus.io/download/里面找到node exporter的下载地址,下载一个最新的版本,接着进行解压缩,直接./node_exporter运行起来,就O了,默认的监听端口是9100,然后再把这个node exporter跟prometheus集成起来 + +编辑prometheus的配置文件,有一个prometheus.yml,里面需要加入job去跟node_exporter进行集成 + +```yaml +scrape_configs: +- job_name: ‘prometheus’ + static_configs: + -targets: [‘192.168.xx.xx:9090’] +- job_name: ‘node_exporter’ + static_configs: + -targets: [‘192.168.xx.xx:9100’] +``` + +重启prometheus server就可以了,直接进入web ui就可以在targets里找到你要监控的机器,然后里面各项资源监控报表都可以看到了 + +让spring boot业务系统接入prometheus也很简单,首先是加入一些依赖 + +就是`io.prometheus.simpleclient`相关的一些依赖,这个其实大家可以自行搜索,网上很多文章讲这个,我们就是说思路,然后在Application类上加入@EnablePrometheusEndpoint注解就可以了 + +此时你访问`http://localhost:8080/prometheus`,就可以看到jvm的监控指标了 + +如果还要接入自定义的指标,需要加入一个拦截器,然后代码里用prometheus client提供的Counter类去进行指标计数就可以了,除此之外,还有gauge、Histogram之类的指标收集API,都可以用来统计业务指标,然后就跟之前一样,接入prometheus即可 + +业务指标:需要采集三个,异常指标,QPS,接口时延,TP99,TP95,TP90 + +其实说实话,这些操作步骤,搜索就是很多,所以不带着大家做了,但是希望大家脑子里应该有这么个思路 + diff --git a/docs/c2c/57.md b/docs/c2c/57.md new file mode 100644 index 0000000..5409230 --- /dev/null +++ b/docs/c2c/57.md @@ -0,0 +1,8 @@ +#《57_为什么微服务化的系统需要一个日志中心?》 + +线上运行的系统,跑着跑着,突然有用户找客服反馈你的系统有个什么什么bug!bug可能有对应的异常报错,也可能没有报错,就是纯粹的是你的代码级别的bug,客服会找你们技术这边 + +快速的定位bug发生的原因,定位 -> 修复 + +通过查阅日志,分析bug发生时,系统是如何运行的,是否运行中有问题导致bug + diff --git a/docs/c2c/58.md b/docs/c2c/58.md new file mode 100644 index 0000000..2e34a89 --- /dev/null +++ b/docs/c2c/58.md @@ -0,0 +1,10 @@ +#《58_Elasticsearch的整体架构原理介绍》 + +线上运行的系统,跑着跑着,突然有用户找客服反馈你的系统有个什么什么bug!bug可能有对应的异常报错,也可能没有报错,就是纯粹的是你的代码级别的bug,客服会找你们技术这边 + +快速的定位bug发生的原因,定位 -> 修复 + +通过查阅日志,分析bug发生时,系统是如何运行的,是否运行中有问题导致bug + +如果你单个服务/系统部署的机器数量都超过5台了,此时必须要上日志中心 + diff --git a/docs/c2c/59.md b/docs/c2c/59.md new file mode 100644 index 0000000..d3b3c64 --- /dev/null +++ b/docs/c2c/59.md @@ -0,0 +1,18 @@ +#《59_基于Elasticsearch设计日志中心的原理分析》 + +线上运行的系统,跑着跑着,突然有用户找客服反馈你的系统有个什么什么bug!bug可能有对应的异常报错,也可能没有报错,就是纯粹的是你的代码级别的bug,客服会找你们技术这边 + +快速的定位bug发生的原因,定位 -> 修复 + +通过查阅日志,分析bug发生时,系统是如何运行的,是否运行中有问题导致bug + +如果你单个服务/系统部署的机器数量都超过5台了,此时必须要上日志中心 + +《互联网Java工程师面试突击第一季》,儒猿技术窝,免费,不要钱,ES的架构原理,我都讲过,大家直接去看一下,倒排索引,正排索引,shard数据分片,replica副本,写入原理,分布式搜索原理 + +业务、项目、服务、时间戳(long)、不同的日志有自己的特殊的业务id(用户id、举报渠道)、日志内容(举报的具体内容数据,json字符串来存储) + +日志中心没有开源的,可能有少数的不知名的,但是连我都没听说过 + +一般都是公司自己基于ES来做研发的,ES+HBase,黄金组合,HBase适合的是海量数据进行存储,ES,内置生成ES的document id,id作为rowkey把日志内容放到HBase里去,程序员,可以根据业务、项目、服务、时间戳(long)、不同的日志有自己的特殊的业务id(用户id、举报渠道)来搜索日志 + diff --git a/docs/c2c/60.md b/docs/c2c/60.md new file mode 100644 index 0000000..66d284a --- /dev/null +++ b/docs/c2c/60.md @@ -0,0 +1,18 @@ +#《60_C2C电商社会化治理平台的日志体系设计》 + +线上运行的系统,跑着跑着,突然有用户找客服反馈你的系统有个什么什么bug!bug可能有对应的异常报错,也可能没有报错,就是纯粹的是你的代码级别的bug,客服会找你们技术这边 + +快速的定位bug发生的原因,定位 -> 修复 + +通过查阅日志,分析bug发生时,系统是如何运行的,是否运行中有问题导致bug + +如果你单个服务/系统部署的机器数量都超过5台了,此时必须要上日志中心 + +《互联网Java工程师面试突击第一季》,儒猿技术窝,免费,不要钱,ES的架构原理,我都讲过,大家直接去看一下,倒排索引,正排索引,shard数据分片,replica副本,写入原理,分布式搜索原理 + +业务、项目、服务、时间戳(long)、不同的日志有自己的特殊的业务id(用户id、举报渠道)、日志内容(举报的具体内容数据,json字符串来存储) + +日志中心没有开源的,可能有少数的不知名的,但是连我都没听说过 + +一般都是公司自己基于ES来做研发的,ES+HBase,黄金组合,HBase适合的是海量数据进行存储,ES,内置生成ES的document id,id作为rowkey把日志内容放到HBase里去,程序员,可以根据业务、项目、服务、时间戳(long)、不同的日志有自己的特殊的业务id(用户id、举报渠道)来搜索日志 + diff --git a/docs/c2c/61.md b/docs/c2c/61.md new file mode 100644 index 0000000..c5f308b --- /dev/null +++ b/docs/c2c/61.md @@ -0,0 +1,19 @@ +#《61_C2C电商社会化治理平台接入日志中心》 + +线上运行的系统,跑着跑着,突然有用户找客服反馈你的系统有个什么什么bug!bug可能有对应的异常报错,也可能没有报错,就是纯粹的是你的代码级别的bug,客服会找你们技术这边 + +快速的定位bug发生的原因,定位 -> 修复 + +通过查阅日志,分析bug发生时,系统是如何运行的,是否运行中有问题导致bug + +如果你单个服务/系统部署的机器数量都超过5台了,此时必须要上日志中心 + +《互联网Java工程师面试突击第一季》,儒猿技术窝,免费,不要钱,ES的架构原理,我都讲过,大家直接去看一下,倒排索引,正排索引,shard数据分片,replica副本,写入原理,分布式搜索原理 + +业务、项目、服务、时间戳(long)、不同的日志有自己的特殊的业务id(用户id、举报渠道)、日志内容(举报的具体内容数据,json字符串来存储) + +日志中心没有开源的,可能有少数的不知名的,但是连我都没听说过 + +一般都是公司自己基于ES来做研发的,ES+HBase,黄金组合,HBase适合的是海量数据进行存储,ES,内置生成ES的document id,id作为rowkey把日志内容放到HBase里去,程序员,可以根据业务、项目、服务、时间戳(long)、不同的日志有自己的特殊的业务id(用户id、举报渠道)来搜索日志 + +[社会化治理平台架构设计](images/61/社会化治理平台架构设计.png) diff --git a/docs/c2c/62.md b/docs/c2c/62.md new file mode 100644 index 0000000..efd5847 --- /dev/null +++ b/docs/c2c/62.md @@ -0,0 +1,16 @@ +#《62_为什么微服务化的系统需要进行链路追踪?》 + +监控:机器资源、JVM进程、系统(QPS、延时、异常)、请求链路 + +日志:异常日志、请求日志 + +链路 + +请求链路 +请求1次数据库 耗时多少ms +请求1次缓存 耗时多少ms +请求2次评审员服务 耗时多少ms +请求1次奖励服务 异常 耗时1s + + + diff --git a/docs/c2c/63.md b/docs/c2c/63.md new file mode 100644 index 0000000..5f498eb --- /dev/null +++ b/docs/c2c/63.md @@ -0,0 +1,16 @@ +#《63_Sleuth、Zipin、CAT的选型对比》 + +监控:机器资源、JVM进程、系统(QPS、延时、异常)、请求链路 + +日志:异常日志、请求日志 + +链路 + +请求链路 +请求1次数据库 耗时多少ms +请求1次缓存 耗时多少ms +请求2次评审员服务 耗时多少ms +请求1次奖励服务 异常 耗时1s + + + diff --git a/docs/c2c/64.md b/docs/c2c/64.md new file mode 100644 index 0000000..a82e105 --- /dev/null +++ b/docs/c2c/64.md @@ -0,0 +1,16 @@ +#《64_CAT实现分布式链路追踪的架构原理》 + +监控:机器资源、JVM进程、系统(QPS、延时、异常)、请求链路 + +日志:异常日志、请求日志 + +链路 + +请求链路 +请求1次数据库 耗时多少ms +请求1次缓存 耗时多少ms +请求2次评审员服务 耗时多少ms +请求1次奖励服务 异常 耗时1s + + + diff --git a/docs/c2c/66.md b/docs/c2c/66.md new file mode 100644 index 0000000..de17f04 --- /dev/null +++ b/docs/c2c/66.md @@ -0,0 +1,14 @@ +#《66_为什么微服务化的系统需要一个API网关?》 + +网关的核心功能 + +(1)动态路由:新开发某个服务,动态把请求路径和服务的映射关系热加载到网关里去;服务增减机器,网关自动热感知 +(2)灰度发布 +(3)授权认证 +(4)性能监控:每个API接口的耗时、成功率、QPS +(5)系统日志 +(6)数据缓存 +(7)限流熔断 + + + diff --git a/docs/c2c/67.md b/docs/c2c/67.md new file mode 100644 index 0000000..501ed81 --- /dev/null +++ b/docs/c2c/67.md @@ -0,0 +1,16 @@ +# 《67_Zuul Srping Cloud Gateway的选型对比》 + +监控:机器资源、JVM进程、系统(QPS、延时、异常)、请求链路 + +日志:异常日志、请求日志 + +链路 + +请求链路 +请求1次数据库 耗时多少ms +请求1次缓存 耗时多少ms +请求2次评审员服务 耗时多少ms +请求1次奖励服务 异常 耗时1s + + + diff --git a/docs/c2c/68.md b/docs/c2c/68.md new file mode 100644 index 0000000..0086030 --- /dev/null +++ b/docs/c2c/68.md @@ -0,0 +1,32 @@ +# 《68_Zuul 作为网关的架构原理介绍》 + + +设计模式,其实在各种开源项目里,到处都是设计模式 + +pre过滤器 + +-3:ServletDetectionFilter +-2:Servlet30WrapperFilter +-1:FromBodyWrapperFilter +1:DebugFilter +5:PreDecorationFilter + +routing过滤器 + +10:RibbonRoutingFilter +100:SimpleHostRoutingFilter +500:SendForwardFilter + +post过滤器 + +1000:SendResponseFilter + +error过滤器 + +0:SendErrorFilter + +zuul的源码,其实非常简单的,一点都不复杂,zuul的源码,有可能是spring cloud几个核心组件里面,最简单的,ribbon差不多一个级别的简单 + + + + diff --git a/docs/c2c/69.md b/docs/c2c/69.md new file mode 100644 index 0000000..2760059 --- /dev/null +++ b/docs/c2c/69.md @@ -0,0 +1,13 @@ +# 《65_CAT分布式链路追踪系统的生产部署实践》 + +监控:机器资源、JVM进程、系统(QPS、延时、异常)、请求链路 + +日志:异常日志、请求日志 + +链路 + +请求链路 +请求1次数据库 耗时多少ms +请求1次缓存 耗时多少ms +请求2次评审员服务 耗时多少ms +请求1次奖励服务 异常 耗时1s diff --git a/docs/c2c/REAME.md b/docs/c2c/REAME.md index 86d2d6a..87d30f2 100644 --- a/docs/c2c/REAME.md +++ b/docs/c2c/REAME.md @@ -93,6 +93,68 @@ - [36、C2C电商社会化治理平台核心链路的分布式事务](36.md) +- [37、微服务化的系统是如何发生服务雪崩的?](37.md) + +- [38、为什么微服务化的系统需要进行限流和熔断?](38.md) + +- [39、Sentinel、Hystrix等技术的选型对比](39.md) + +- [40、SpringCloudAlibaba之Sentinel限流熔断框架](40.md) + +- [41、SpringCloudAlibaba之Sentinel框架原理](41.md) + +- [42、2C电商社会化治理平台基于Sentinel实现限流](42.md) + +- [43、C2C电商社会化治理平台基于Sentinel实现资源隔离](43.md) + +- [44、C2C电商社会化治理平台基于Sentinel实现熔断保护](44.md) + +- [45、为什么微服务化的系统需要一个配置中心?](45.md) + +- [47、携程开源的Apollo配置中心的原理介绍](47.md) + +- [48、Apollo配置中心的内核原理深度解析](48.md) + +- [49、对Apollo配置中心进行分布式架构部署](49.md) + +- [50、在C2C电商社会化治理平台中引入Apollo配置中心](50.md) + +- [51、如何让Apollo配置中心实现多环境配置隔离?](51.md) + +- [52、为什么微服务化的系统要需要一个监控中心?](52.md) + +- [53、Zabbix、Falcon、Prometheus的选型对比](53.md) + +- [54、Prometheus的整体架构设计以及原理介绍](54.md) + +- [55、基于Prometheus实现系统的指标监控以及告警](55.md) + +- [56、C2C电商社会化治理平台的监控体系设计](56.md) + +- [57、为什么微服务化的系统需要一个日志中心?](57.md) + +- [58、Elasticsearch的整体架构原理介绍](58.md) + +- [59、基于Elasticsearch设计日志中心的原理分析](59.md) + +- [60、C2C电商社会化治理平台的日志体系设计](60.md) + +- [61、C2C电商社会化治理平台接入日志中心](61.md) + +- [62、为什么微服务化的系统需要进行链路追踪?](62.md) + +- [63、Sleuth、Zipin、CAT的选型对比](63.md) + +- [64、CAT实现分布式链路追踪的架构原理](64.md) + +- [66、为什么微服务化的系统需要一个API网关](66.md) + +- [67、Zuul Srping Cloud Gateway的选型对比](67.md) + +- [68、Zuul 作为网关的架构原理介绍](68.md) + +- [69、基于网关实现服务动态路由和灰度发布](69.md) + ## 资料链接 ### 第一周: @@ -122,3 +184,6 @@ https://pan.baidu.com/s/1l6rwzp_TlH6XwfD3OkK7og 密码: mafw ### 课程笔记以及代码 (第一周〜第十一周的笔记)代码在第六周) 链接: https://pan.baidu.com/s/1JFP6a7lqcBI9IRPpru5VAg 密码: alns + +### 2021年01月03日 课程笔记以及代码 +链接: https://pan.baidu.com/s/1tSGinusTWy1kiX4nA6FouA 密码: 1g4f diff --git "a/docs/c2c/demo/69/344円273円243円347円240円201円.zip" "b/docs/c2c/demo/69/344円273円243円347円240円201円.zip" new file mode 100644 index 0000000..9060d04 Binary files /dev/null and "b/docs/c2c/demo/69/344円273円243円347円240円201円.zip" differ diff --git "a/docs/c2c/images/61/347円244円276円344円274円232円345円214円226円346円262円273円347円220円206円345円271円263円345円217円260円346円236円266円346円236円204円350円256円276円350円256円241円.png" "b/docs/c2c/images/61/347円244円276円344円274円232円345円214円226円346円262円273円347円220円206円345円271円263円345円217円260円346円236円266円346円236円204円350円256円276円350円256円241円.png" new file mode 100644 index 0000000..9f66c6f Binary files /dev/null and "b/docs/c2c/images/61/347円244円276円344円274円232円345円214円226円346円262円273円347円220円206円345円271円263円345円217円260円346円236円266円346円236円204円350円256円276円350円256円241円.png" differ diff --git a/docs/c2c/sql/c2c.sql b/docs/c2c/sql/c2c.sql new file mode 100644 index 0000000..b28fab0 --- /dev/null +++ b/docs/c2c/sql/c2c.sql @@ -0,0 +1,36 @@ +-- Create syntax for TABLE 'report_task' +CREATE TABLE `report_task` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(50) NOT NULL DEFAULT '', + `report_user_id` int(11) NOT NULL, + `report_content` varchar(255) NOT NULL DEFAULT '', + `target_id` int(11) NOT NULL, + `vote_result` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4; + +-- Create syntax for TABLE 'report_task_vote' +CREATE TABLE `report_task_vote` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `reviewer_id` int(11) NOT NULL, + `report_task_id` int(11) NOT NULL, + `vote_result` tinyint(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8mb4; + +-- Create syntax for TABLE 'reviewer_task_status' +CREATE TABLE `reviewer_task_status` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `reviewer_id` int(11) NOT NULL, + `report_task_id` int(11) NOT NULL, + `status` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8mb4; + +-- Create syntax for TABLE 'reward_coin' +CREATE TABLE `reward_coin` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `reviewer_id` int(11) NOT NULL, + `coins` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4; diff --git "a/docs/c2c/346円236円266円346円236円204円345円233円276円/C2C347円224円265円345円225円206円347円244円276円344円274円232円345円214円226円346円262円273円347円220円206円345円271円263円345円217円260円346円236円266円346円236円204円345円233円276円.png" "b/docs/c2c/346円236円266円346円236円204円345円233円276円/C2C347円224円265円345円225円206円347円244円276円344円274円232円345円214円226円346円262円273円347円220円206円345円271円263円345円217円260円346円236円266円346円236円204円345円233円276円.png" new file mode 100644 index 0000000..f8e8e8c Binary files /dev/null and "b/docs/c2c/346円236円266円346円236円204円345円233円276円/C2C347円224円265円345円225円206円347円244円276円344円274円232円345円214円226円346円262円273円347円220円206円345円271円263円345円217円260円346円236円266円346円236円204円345円233円276円.png" differ