关于springcloud
单体, 微服务, 分布式 1.1.单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。 单体架构的优缺点如下: 优点: 架构简单 部署成本低 缺点: 耦合度高(维护困难、升级困难) 1.2.分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 分布式架构的优缺点: 优点: 降低服务耦合 有利于服务升级和拓展 缺点: 服务调用关系错综复杂 分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考: 服务拆分的粒度如何界定? 服务之间如何调用? 服务的调用关系如何管理? 人们需要制定一套行之有效的标准来约束分布式架构。 1.3.微服务微服务的架构特征: 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责 自治:团队独立、技术独立、数据独立,独立部署和交付 面向服务:服务提供统一标准的接口,与语言和技术无关 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题 微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服...
学习sentinel
1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。 但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞: 服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。 那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了: 1.1.2.超时处理解决雪崩问题的常见方式有四种: •超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待 1.1.3.仓壁模式方案2:仓壁模式 仓壁模式来源于船舱的设计: 船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内,避免整个船体都被淹没。...
SpringBoot项目启动时初始化操作的6种方式
SpringBoot项目启动时初始化操作的6种方式1、监听容器刷新完成扩展点ApplicationListener<ContextRefreshedEvent>ApplicationContext事件机制是观察者设计模式实现的,通过ApplicationEvent和ApplicationListener这两个接口实现ApplicationContext的事件机制。 Spring中一些内置的事件如下: ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。 ContextStartedEvent:当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 star...
spring5学习
代码地址: https://github.com/behappy-spring-study/spring5_study_source 容器与 bean1) 容器接口 BeanFactory 接口,典型功能有: getBean ApplicationContext 接口,是 BeanFactory 的子接口。它扩展了 BeanFactory 接口的功能,如: 国际化 通配符方式获取一组 Resource 资源 整合 Environment 环境(能通过它获取各种来源的配置信息) 事件发布与监听,实现组件之间的解耦 可以看到,我们课上讲的,都是 BeanFactory 提供的基本功能,ApplicationContext 中的扩展功能都没有用到。 演示1 - BeanFactory 与 ApplicationContext 的区别代码参考com.itheima.a01 包 收获💡通过这个示例结合 debug 查看 ApplicationContext 对象的内部结构,学到: 到底什么是 BeanFactory 它是 ApplicationContext 的父接...
探究spring的底层实现原理1
探究spring的底层实现原理1<谨供参考> 这篇文章我将尝试从以下几个方面配合源码讲解spring的原理,并在下一个篇章手写一个简易版spring的小demo来更透彻的分析spring项目是如何"动"起来的 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 先来看一张图(看不清可以右键打开) 这里需要说的一点是,spring的核心就是AbstractApplicationContext.refresh中的13个方法,关于refresh我会单独写BeanFactory12345678910以springboot项目为例,运行主入口类的SpringApplication.run会走到AbstractApplicationContext.refresh方法,从ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()到registerListeners()都是在准备并创建BeanFactory的过程,而这个BeanFacto...
探究spring的底层实现原理2
接上一篇[探究spring的底层实现原理1上一篇从理论到源码讲到了以下四点 BeanFactory Bean的整个生命周期 Bean的属性填充 依赖注入 这节就切合上一篇,手写一个简易版spring的小demo,看看我是怎样去实现的java <谨供参考> 应用程序上下文(启动类) 123ClassPathXmlApplicationContext:xml配置文件方式AH8q3dGK2f2vLZVgbRfLTjQPySe2yRaJHs:注解方式SpringApplication:SpringBoot方式 模拟注解方式启动 配置类,指定"spring"需要扫描的限定包路径 123@ComponentScan("org.xiaowu.xiaowu.spring.xiaowu")public class AppConfig {} 标注@Component的类则是需要被spring管理的 12345@Target({ElementType.TYPE})@Retention(Re...
hexo基础seo优化
seo搜索引擎优化(Search Engine Optimization),它是一种通过分析搜索引擎的排名规律,了解各种搜索引擎怎样进行搜索,怎样抓取互联网页面,怎样确定特定关键词的搜索结果排名的技术.Google自动收录效果还不错,百度就差得远了 另外GitHub不允许百度的Spider爬取GitHub上的内容,但我仍会把百度相关部分粘贴出来 修改路径结构 permalink: :year:month:day/:title/ 网站收录谷歌 进入谷歌站长(https://search.google.com/search-console),选择第二个带前缀的 然后选择html标签认证, 将内容粘贴到主题可放置head标签的地方,随后,重新部署博客,再点击验证 百度 首先登陆百度搜索平台(https://ziyuan.baidu.com/site/index),点击**新增网站** 输入自己的网站 验证, 我选择的是html标签,然后在主题文件夹下找到放置head标签的地方,将代码粘贴进去, 然后重新提交. 之后在点击完...
利用github的actions实现blog的cicd
参考: https://zellwk.com/blog/github-actions-deploy/ 首先博客如果使用hexo搭建, 且借助hexo-deployer-git依赖进行远程上传的话, 则需要将repo设置为ssh方式, https方式是不支持的, 如下 12345deploy: type: git # Windows: https://github.com/wang-xiaowu/wang-xiaowu.github.io.git repo: git@github.com:wang-xiaowu/wang-xiaowu.github.io.git branch: master 当前样例为, 一个blog_source库(未公开)存储未编译md文档, 走cicd流程之后, 将编译好的资源利用hexo d的方式部署到另一个一个github源仓库(开源库) 首先配置ssh/private key1ssh-keygen -t rsa -b 4096 -C "943915349@qq.com" -f key 邮箱修改为本人邮箱 复...
定制化Gitbook在线文档服务
定制化gitbook在线文档服务项目介绍 定制化gitbook服务 安装部署教程 Docker 安装docker服务:https://docs.docker.com/install/#supported-platforms 安装docker-compose:https://docs.docker.com/compose/install/ 进入根目录执行 docker-compose up -d 本地试运行 安装 GitBook-cli npm install gitbook-cli -g cmd切到book下,gitbook 初始化 gitbook init注: 超过node10的版本,需替换掉/xxx/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js文件,或注释掉61-63 下载依赖项,执行 gitbook install 注: 4,5可选一个执行 服务形式启动,默认端口4000:执行gitbook serve 构建成静态文件:执行gitbook ...
记录hexo整合pwa的使用
pwa介绍 渐进式网络应用程式(英语:Progressive Web Apps,简称:PWA)是一种普通网页或网站架构起来的网络应用程式,但它可以以传统应用程式或原生移动应用程式形式展示给用户。这种应用程式形态视图将目前最为现代化的浏览器提供的功能与行动装置的体验优势相结合。 当你的网站实现了 PWA,那就代表了 用户可以添加你的博客到电脑 / 手机的桌面,以原生应用般的方式浏览你的博客 用户本地可以自动生成缓存,二次访问速度大大加快 用户可以离线浏览你的博客 下面的 PWA 实现方法借助了 Gulp 插件,在站点有内容更新时,可以弹窗提醒用户刷新页面。 背景 本文使用butterfly主题作为演示 虽然官方对pwa做了很好的集成,但是文档中介绍的并不全面,而且还有许多坑需要自己踩一遍,特此记录下 配置 本文使用Gulp 和 WorkBox组合进行配置pwa 克隆现成的butterfly demo项目,默认集成了hexo-offline和gulp https://github.com/jerryc127/butterfly.js.org.git 去除he...
