《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结

《Java深入微服务原理改造房产销售平台》单体知识点 一图胜千言 《Java深入微服务原理改造房产销售平台》微服务知识点 一图胜千言 《Java深入微服务原理改造房产销售平台》日常答疑 既然已经在session有了,直接session取就行了,为什么要再放threadlocal,之后再从threadlocal清掉,一直从session拿不就行了? 答: 放在Threadlocal里面,是为了后面的Controller、Service、Dao任何地方只要是当前业务处理的线程都能 直接并且方便的 获取到用户对象. 如果我们不做这种处理,那只能从Session中获取,当Service里面要获取user的时候,Controller在调用service方法时就必须传递HttpServletRequest这种容器相关参数,增加了业务与底层实现的耦合,造成业务处理关注点的增多;而且每个Controller都需要接收HttpServletRequest参数,因为不能预估未来是否要获取user对象来逻辑处理。 2 nginx的配置中root和alias的区别? 答: root和alias的区别是酱紫的: 配置root需要访问路径要叠加目录路径,比如配置了 location /images { root /path/to/img; } 那么有张图/path/to/img/a.jpg,那么浏览器中访问到这张图片就需要http://localhost:8081/images/path/to/img/a.jpg 而alias就简单多了,url中不需要关心本地目录路径 location /images { alias /path/to/img; }…

Maven-maven多模块项目搭建+Dubbo分布式服务框架

maven多模块项目搭建 最近呢学校校企合作培训,老师给我们出了一道题让做一个秒杀系统。要求前后端分离,要有独立的商品服务,独立的库存服务,独立的交易服务。经过团队的协商我们决定使用maven多模块,来将这些服务进行整合,到最后统一一键暴露接口服务,而不用再一个个启动服务了。 1.新建maven项目 2.选择项目存放的路径后,选择创建一个简单的maven项目 3.填写Group Id和Artifact Id,也可以自定义版本号 4.项目的目录结构很简单 5.这里我们要看一下pom.xml,这里Packaging需要改为pom 接下来我们构建里面的子模块(seckill_interface) 1.在已经建成的项目上右键新建project此时选择创建Maven Module 2.此时项目类型选择为maven-archetype-quickstart 3.建成之后的项目结构为 接下创建提供服务的模块儿(user_backService,business_backService,commodity_backService,stock_backService) 这四个独立的服务项目构建过程与seckill_interface构建过程一样 最终结构如下图 为了使这些服务能跑起来需要我们去创建一个如下类型的maven子项目(web) 然后填写Group Id和Artifact Id,也可以自定义版本号 到现在为止,整个项目的架子是搭好了。(搭建webApp类型的maven子项目其实是依赖前面的接口的4个服务的。) 最终open_backService是被打成war包进行发布的,其他的依赖都会被打成jar被Open_backService引用。 接下来我们配置相关接口服务整个项目结构如下图 最主要的在于包【top.softzztiedu.service】中。 我们将服务写成接口通过Dubbo进行服务治理 我们的服务如何暴露呢,当然是在open_backService中了(见下图) 【1】配置remote-provider.xml <?xml version="1.0"…

【极力推荐】—安装阿里代码规约检查插件

前言 从阿里2月9日首次公布《阿里巴巴Java开发规约》后整个java世界都沸腾了,想起来以前写的代码真的是【完全没有规律可循】 在10月14日,杭州云栖大会,阿里巴巴对外开放了Java代码规约插件及源码 对于我们职场新人或是java初学者来说的确是一个不小的福利,从我们自己去检查到自动化检查处理,的确是方便了很多 如何安装IDEA插件? 最低支持版本14.1.7,JDK1.7+ 打开 File>>Settings >> Plugins >> Browse repositories 输入 Alibaba 搜索 找到:Alibaba Java Coding Guidelines 下载安装,重启IDEA即可生效 对我之前写的代码测试测试一把,如下图 很清晰明了的中文提示 另一个系统测试时的提示【好人性化】 一键帮你搞定 如何安装Eclipse插件 Eclipse版插件支持4.2 JDK1.8+ 通过 Help…

Linux——CentOS7之screen安装与命令详解

前言 这几天在摆置服务器时犹豫网络问题导致SSH远程登录linux时总是非正常中断,登录上后无法继续刚刚的任务,所以【崩溃中】。未解决这个问题我找到了它screen。 简介 使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。 会话恢复 只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。 多窗口 在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。 GNU’s Screen 官方站点:http://www.gnu.org/software/screen/ 语法 screen 参数说明 -A  将所有的视窗都调整为目前终端机的大小。 -d <作业名称>  将指定的screen作业离线。 -h <行数>  指定视窗的缓冲区行数。 -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。 -r <作业名称>  恢复离线的screen作业。…

今晚吃什么:咖喱鸡肉饭

用料: 鸡胸肉、土豆、胡萝卜、好侍百梦多咖喱、洋葱、番茄、生姜、生抽、黄酒、食用油、食盐 (按用餐人数准备食材分量。我们家4个人吃,用料见下图,实际操作时多加了一个土豆,胡萝卜去掉一半。供大家参考!) 做法(4人份): 1.鸡胸肉洗净切块放入碗中,加入生姜、黄酒、生抽、食盐腌渍40分钟,后入炒锅煸炒至变色,起锅待用。 2.土豆和胡萝卜洗净去皮后切块,洋葱和西红柿洗净后切碎。 3.炒锅倒入适量食用油,烧热,放入洋葱西红柿碎翻炒出香气,倒入5碗清水,大火烧开后转小火慢炖直至洋葱西红柿成糊状。 (成品图完全看不出有放西红柿和洋葱,好吃的重点就在这里!洋葱西红柿糊和咖喱融合后特别美味,它们起到提味的作用!) 4.糊中加入土豆、胡萝卜和煸炒好的鸡肉一起焖煮,煮一会试出土豆熟透后加入咖喱块,不断用锅铲搅拌,以免糊底。 (如果喜欢胡萝卜软烂一些,可以把它放到第三个步骤里去) 5.待汤汁变浓稠后尝一尝味道,根据个人口味选择是否再加盐。 6.完美出锅!

MariaDB Galera Cluster 部署

如何快速部署MariaDB集群 陈亮 — July 02, 2015 MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力,集群部署是必不可少的。 MariaDB Galera Cluster 介绍 MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 – 看wsrep_replicate_myisam系统变量)。 主要功能: 同步复制 真正的multi-master,即所有节点可以同时读写数据库 自动的节点成员控制,失效节点自动被清除 新节点加入数据自动复制 真正的并行复制,行级 用户可以直接连接集群,使用感受上与MySQL完全一致 优势: 因为是多主,所以不存在Slavelag(延迟) 不存在丢失事务的情况 同时具有读和写的扩展能力 更小的客户端延迟 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的 技术: Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera…

学会用各种姿势备份MySQL数据库

前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢失、或者丢失后可以快速恢复呢?只要看完这篇, 大家应该就能对MySQL中实现数据备份和恢复能有一定的了解。 为什么需要备份数据? 其实在前言中也大概说明了为什么要备份数据, 但是我们还是应该具体了解一下为什么要备份数据 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种. 硬件故障 软件故障 自然灾害 黑客攻击…

在Service Fabric上运行微服务

原文:Microservices à la Service Fabric 作者:Chase Aucoin 翻译:张鑫健;审校:孙薇 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshuguang2008申请入群,备注姓名+公司+职位。 Service Fabric框架对微软而言是一大进步。其核心部分是一个分布式系统平台,用于构建可扩展的可靠应用。在便于封装可部署代码的同时,还内置了微服务最佳实践案例。 本文将带您最快地上手使用Service Fabric框架,并保证您会爱不释手。但想要了解Service Fabric框架以及它的重大意义,就有必要了解现代软件发展到今天,在采用Service Fabric框架前,前人们血与泪的历史。 面向对象的黄金时代 在引入面向对象和现代的计算模式之后,计算机界发生了翻天覆地的变化。Visual Basic在1991年面世,真正揭开了现代风格软件开发的序幕,使得开发人员可以专注于商业价值,而不用像之前那样顾虑一大堆硬件特性的问题。之后在这种开发思路下,出现了后来的运行库,比如1995年的Java,2000年的.NET framework和C#。尽管在之后几年中,Java和C#出现了些许变化,但采用的模式和实践方式却没有太大变化。 这些实践、模式以及运行库在进化过程中都有如下共性:内部构架变得原来越抽象,然而使用门槛却越来越低。终端开发者无需操心细枝末节、重复任务和管道问题,从而专注于传达产品的业务价值。 敏捷的诞生 在整个计算机行业的代码编译出现模式和实践范例的同时,我们却忽视了改进提炼围绕着产品开发与SDLC的商业进程。 当时大多数人认为SDLC相关的模式(瀑布、大爆炸/一次性集成、螺旋等)过于死板受限,无法适应开发者新的快速任务执行的能力。开发者在功能构建上的速度已经超过了商业进程的速度,他们将大多时间花在构建需求文档和不注重价值的产品上。 2001年在犹他州Snowbird举行的会议上,有一批先驱者提出了关于SDLC思考方式的指导思想,也就是后人所称的敏捷宣言(Agile Manifesto)。 agileSHERPA提出: “相比于强调提前规划和需求详尽,本指导思想的重点在于:如何进行持续规划、团队授权、彼此协作、紧急设计、早期测试和经常探究根本,最重要的是能在短期快速迭代中交付软件。” 但在实际应用中,各公司尤其是企业组织最初非常抵触这种思考方式与抽象化商业进程。 而其他人迫切渴望采用这种思想,却完全无法理解。…

超长干货:基于Docker的DevOps CI/CD实践——来自iHealth的分享

本文由1月31日晚iHealth运维技术负责人郭拓在Rancher官方技术交流群内所做分享的内容整理而成,分享了iHealth从最初的服务器端直接部署,到现在实现全自动CI/CD的实践经验。文末添加Rancher小助手为好友加入技术交流群,可实时参加下一次技术分享~ 前言 相信我,一切事情的发生都是赶鸭子上架,没有例外。人类所有伟大的变革都是迫不得已,可又是那么顺其自然。比如容器(docker)技术的诞生,比如箭在弦上的创业,比如野心勃勃的kubernetes,比如如今已作为左膀右臂的rancher,比如这篇文章。 不同于郑兄的CI/CD实践《如何利用Docker构建基于DevOps的全自动CI》,我们结合自身状况,构建了一套我们自己的DevOps CI/CD流程,更轻更小,更适合Startup。 合适的才是最好的(Node.js & Docker) 如果世界只有FLAG、BAT,那就太无趣了。iHealth是一家初创型公司,我所在的部门有大概10名研发人员,在担负着三端研发工作的同时,所有围绕服务的交付和运维工作也都是我们来做。 技术的选型上,服务端、Web端和移动端(Android、iOS)都要上,但人少。所以招人的时候并没有以貌取人的资格,部门对外的Title都是全栈。能一门语言通吃三端,群众基础广泛,恐怕没有比Javascript/Typescript(Node.js)更合适的了。 服务端有Express、Koa、Feather、Nest、Meteor等各有其长的框架,前端大而火的Reactjs、Vuejs和Angular,不管是Server Render还是前后端分离,都可以得心应手。因为公司的健康设备(血糖仪、血压计、体温计、血氧、体脂秤等等)会有专门的部门研发设计以及提供SDK,所以移动端的研发工作更多是在设计实现和性能优化上,React Native是一枚大杀器。虽然现在公司并没有桌面端的需求,但不能否认的是Electron是一个很有趣的项目,也为“全栈”这个词增加了更多背书。 另外,选择使用Node/Js/Ts作为全栈的基础会附带有RPC的好处。无需集成传统意义上的RPC框架(如gRPC),只需在编写远程(微)服务方法时,编写相应的npm package,也可以达到相同的目的,且成本更小,更易理解。 运维环境的选型上,所有的业务都运行在云端,省去了机房维护和服务器运维的成本。其实在盘古开荒时,我们也是编写了Node程序后,使用PM2部署在服务器上,并没有使用Docker。当然也存在没有使用Docker所带来的一切问题:三端不同步、环境无法隔离……而Docker带给我最大的惊喜除了超强的可移植性,更在于研发人员可以非常容易对程序的顶级架构进行推理。 事实上,我们直接使用docker-compose做容器编排着实有一段时间,在一次大规模的服务器迁移中,发现需要重新思考越来越多的container管理和更完善的编排方案。Rancher(Cattle)就是在这时被应用到技术栈中。 一切从Github开始 在运维环境一波三折的同时,DevOps的征程也是亦步亦趋,步步惊心。幸运的是,我们知道自己缺乏什么,想要什么,所以能比较容易的做到“哪里不会点哪里”。如同上一章节所述,合适的才是最好的。持续集成(CI)与持续交付(CD)的迭代过程,从最初的代码拷贝,到结合docker-compose与rsync命令,到使用CI/CD工具,做到相对意义上的自动化……迄今为止,我们摸索出一套相对好用并且好玩的流程: 故事大致是这样的,当一只代码猴提交代码之后,他需要去接一杯咖啡。在猫屎氤氲的雾气里45°角仰望天花板,手机微信提醒这次构建成功(或失败,并附带污言秽语)。这时他可以开始往工位走,坐下时,微信又会提醒本次部署到Rancher成功(或失败)。 这一切开始的地方是github。当开发者写完 BUG 功能之后,需要有地方保存这些宝贵的资料。之所以没有使用Gitlab或Bitbucket搭建私有的Git服务器,是因为我们认为代码是最直接的价值体现。服务如骨架,终端如皮肤,UE如衣服,三者组成让人赏心悦目的风景,代码是这背后的基础。我们认为在团队精力无法更分散、人口规模尚小时,购买Github的商业版是稳妥且必要的,毕竟那帮人修复一次故障就像把网线拔下来再插上那样简单。 Drone CI Drone这个单词在翻译中译作雄蜂、无人机。我特意咨询了一位精通一千零二十四国语言的英国朋友,说这个词的意思是autonomous,works by itself。白话就是有活它自己干,而且是自主的。不过这个解释对于Drone来说名副其实。这个在Github上拥有13,000+ Stars的开源项目,使用Golang编写,相比Jenkins的大而全,Drone是为Docker而生的CI软件。如果有使用过Gitlab CI的小伙伴,相信对Drone的使用方式不会感到陌生,他们都是使用Yaml风格文件来定义pipeline:…