Spring Cloud 实战

1. 框架定位有什么区别?

答:Dubbo只是RPC定位,Spring Cloud是微服务生态圈package

2. 框架通信模式有何不同?

答:Dubbo支持json等,而Spring Cloud以http(rest)为其协议,则可以支持所有以http为协议的语言,例如php。

3. Spring Cloud Config和Nacos有什么区别?

答:前者只是配置中心,后者是配置中心+服务发现中心,前者不提供权限支持,后者可以对配置中心的浏览进行权限配置。

4. Spring Boot的监控方案是什么?

答:Spring Boot Admin或者Acutator

5. Java编译工具的鄙视链是什么?

答:Gradle -> Maven -> Ant

6. Maven的一个重要命令是什么?

答:mvn clean package -Dmaven.test.skip=true -U 其中-U是指强行重新下载所有的依赖,让其自动更新到最新的。

7. 项目的版本是什么样的?

答:java jdk 1.8, maven 3.5.0, mysql 5.7,redis 4.X, Nacos,RabbitMQ,Sentinel 1.6.1。

8. 项目的安装文件是怎么样的?
# 导入代码前,记得先安装lombok插件,否则你的IDE会报代码缺失。

# root项目节点下面使用maven打包
mvn clean package -Dmaven.test.skip=true -U

# UI python + nodejs
#修改config/index.js 把 cloud.gateway.com 修改为自己的ip
或者 修改本机hosts添加:
127.0.0.1       cloud.gateway.com
192.168.100.28  cloud.gateway.com


npm install
#如果执行install慢的话就利用淘宝加速 
#npm install --registry=https://registry.npm.taobao.org

npm run dev


###########################
# docker
###########################
# rabbitmq
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 -p 15674:15674 -p 15670:15670 -p 15673:15673 --restart=always xiaochunping/rabbitmq:management 

# redis, password
docker run -d --name redis -p 6379:6379 redis redis-server --requirepass "redis123456" --appendonly yes

# sentinel 1.6.1 http://192.168.100.240:8080
mvn clean package -Dmaven.test.skip=true -U
./build.sh

# nacos http://192.168.100.240:8848/nacos
# 修改standalone-mysql-study.yaml 数据库ip(mysql主从的ip)
docker-compose -f standalone-mysql-study.yaml start

# mysql
# 1、启动mysql主动容器
docker run --name mysql-master --privileged=true -v /home/mysql/master-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-master
docker run --name mysql-slave --privileged=true -v /home/mysql/slave-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-slave

# 2、进入主容器
docker exec -it mysql-master /bin/bash
mysql -uroot -proot

grant replication slave on *.* to 'test'@'%' identified by '123456';
flush privileges;
// 查看主的状态
show master status;

# 3、进入savle开启数据同步
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot
change master to master_host='master', master_user='test', master_password='123456', \
master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=589, master_connect_retry=30;

start slave;
// 查看从的状态
show slave status\G
9. 多个服务器如何控制?

答:用xshell来管理和登陆多个服务器。

10. 所有的服务器/服务都需要设置密码,例如redis,不然扫描端口之后会被塞进去很多木马,然后不小心执行了就完蛋了。
11. 如何验证主从mysql数据库是否成功?

答:show slave status


看这四个参数
12. 如何查看服务器内存使用情况?

答:free -h

13. 问老师如何用k8s来做
14. 如何保证数据安全?

答:从两方面,一方面保证是这个人发的(authentication),另外一方面数据是完整的(integrity),一般来说钥匙+sum验证码即可解决这个问题。

15. Shiro和JWT的区别是什么?

答:Shiro是基于session的,JWT是基于token的。

16. 京东的用户登陆方式是什么?

答:通过专门的passport.jd.com来实现登陆各个子系统,获取一个令牌,再从令牌拿一个token,这个token有过期机制或者登陆次数限定机制。这种方式叫做单点登陆。可以通过CAS+COOKIE或者OAUTH的方式来实现。

17. 网易云的数据库主从如何进行同步?

答:通过redis+kafka来进行同步binlog。kafka监听binlog日志,然后其他消费者通过监听kafka来进行同步。

18. Mysql & Elastic Search之间的数据如何同步?

答:也是可以通过logstash进行binlog同步。

19. 普通的架构是什么样的?

答:其中gateway和普通的终端之间还要用nginx做反向链接,但是图中并未标出。


架构
20. nginx/tomcat/gateway的并发量是什么样的?

答:一台nginx一般并发量可以达到10万,而一台tomcat或者gateway在500到800之间,所以如果要并发量达到10万,则需要一台nginx+20台左右的tomcat/gateway。

21. nginx应该如何配置?

答:upstream到前端,后端的转接到对应的api地址。

22. 入职新公司或者在某些项目上做二次开发第一步应该做什么?

答:了解这个项目的产品原型(即功能有哪些)。

23. Swagger是自动生成api文档的工具。api文档分两种,一种是doc版本的(适合银行/微信等api变动不大的企业),另外一种是在线api文档(适合迭代比较高的企业)。
24. 如何协调前后端合作?

答:可以使用rap2 api,前端mock数据,后端可以统一mock的格式,使得双方可以同时进行开发。这是带团队的方式。开源的,是java的,可以部署到自己企业。

25. swagger和rap2的区别是什么?

答:swagger需要后端部署了才可以访问,rap2不需要;swagger没有权限控制,不能对api进行分组。

26. docker-compose要在后台运行怎么弄?

答:-d 加上这个参数就可以了。

27. 作业:将druid换成HikariCP。
28. 作业:将docker换成k8s。答案
29. 可以使用graylog来展示log日志,比kibana专业。
30. 分布式事务用hmily tcc,还有了解sentinel如何操作进行限流。
31. 事务的特性为ACID(原子性,一致性,隔离性,持久性),其中隔离性会带来脏读,幻读和不可重复读。(需要自己去了解)http://www.txlcn.org/zh-cn/docs/preface.html
TCC需要人工干预
32. 分布式事务包含哪几种解决方案?
  • 最终一致性(tcc,分布式中间件的可靠消息)
  • 强一致性
    其中tcc的最终一致性要强一些,但是性能差一些,分布式中间件则是性能好,但是最终一致性弱一点。
33. 普通公司的并发量一般不超过1万。
34. 可以使用死信队列或者定时任务来让优惠券过期。
35. 定时调度框架包括xxl-job,elastic-job,quartz,TBschedule。
36. 网易云的并发量在2w+左右。
网易云
37. Redis & Memcached的区别是什么?

答:Redis支持的数据结构较多,包括list/string等,但是Memcached只是key/value的系统。Memcached并发高多线程,Redis并发也高但是是单线程。


网易云

网易云
38. 同城多活,异地多活是什么意思?

答:参看12

39. 乐观锁如何在评论数据库中体现?

答:通过在comment里面设计version来实现。要解决行锁竞争,就需要异步的方式来解决。对于删除,网易云一般推荐逻辑删除,而不是物理删除。


乐观锁

网易云

网易云

网易云

网易云
网易云
40. 在网易云的comment id是怎么设计的?

答:自己实现的id,可以体现出对应的comment resource。

41. 如何保证点赞的有序性?

答:同一个资源的评论放到一个MQ partition,利用kafka某个一个queue能保证队内有序性来完成,但是也不能完全有序,例如前端使用了load balancer,发送过来的消息就不会完全有序;同时消费者端只是用单个消费者。


点赞
42. 缓存如何设计?

答:需要聚合的可以通过redis过2s过期的方式来做;但是只能有一个线程拿到分布式锁,其他人可以进行等待。


缓存
43. 最新评论如何设计?

答:不是通过page,而是通过time来做的分页。


最新评论
44. 如何通过前端来控制响应时间?

答:网易云评论是异步的,所以需要前端请求了api之后,api先判断是否可以是允许发表的评论,如果可以返回成功,前端立即显示,同时api再异步进行插入,自己能看到,但是别人看不到。


网易云
45. 如何解决行锁问题?

答:从客户端来说需要设置1s之后再集中更新,有个更新的频次。或者通过redis来做聚合,之后再更新到服务器。或者异步化。

46. 缓存集群还是应该通过一致性哈希的方式来运作,而不是取模,防止因为一个节点挂了,导致大面积缓存失效。
47. count的功能可能会使用另外新的数据表来解决。
48. 多级缓存数据不一致的情况如何解决?

答:提供纠错方案。例如redis过2s设置缓存失效。因为不一致的情况会一直存在,很难消除。或者订阅binlog,然后将消息丢入消息队列,来进行操作。

49. Docker中的ADD和COPY有什么区别?

答:ADD和COPY都可以将文件放到docker系统里,但是ADD还可以选择网址的文件进行下载,解压缩再放到docker系统里。

50. Docker中有几种启动程序的方式?

答:可以使用Entrypoint,这种方式比较单一;另外可以自己写脚本,然后CMD这个脚本运行。

51. Docker的Expose有什么意义?

答:使得程序默认使用这个端口号,免得k8s等随机生成端口号。

52. Spring Boot的Docker要如何更快启动?

答:可以将jar包手动解压缩,这样COPY进去之后就不用解压缩了。


解压缩
53. 如果jar包太大了,该怎么弄?
解决方案,挂一个共享盘
54. 发布jar包的流程是什么?

答:要记得先docker login


流程
55. 私有的jar包应该用什么搭建?

答:docker版本的harbor。

56. docker compose里面的version应该如何制定?

答:先查看本地的docker版本和docker compose版本,然后根据版本才能知道支持的对应version是什么。

57. 如何删除docker compose被用户强制打断的container?

答:docker-compose -f ... rm

58. 如何能在A项目中使用B项目的名字而不是其ip地址进行访问?

答:用links这个关键字。


links
59. 一定要指定网络信息,不然会用默认的。服务最好都在同一个网络里面,这样可以调用。一般来说单机的docker使用的是bridge的network,而swarm集群使用的是overlay的network。
60. docker compose里面可以通过ENVIRONMENT来传入环境变量,使得nacos可以读取;docker run可以通过-d的方式传入环境变量。
61. 可以通过指定服务的docker CPU来限制服务的使用。这样就不用传入jvm参数来限制使用,因为先要在docker那一层去做限制。
限制
62. 前端项目打包成静态文件由nginx来执行,最好不要用docker来打包镜像用npm来执行。【可以用jenkins来链接起来】
63.无状态的service扩容可以用docker-compose scale;有状态的例如端口指定的,是不能用docker-compose scale的。此时需要swarm或者k8s来操作。将docker compose文件copy到调度节点上,然后执行docker stack deploy。
64. docker swarm如何操作显示所有节点?

答:docker node list,docker stack list来显示部署的内容。


docker swarm
65. k8s如何查看资源是否空置?

答:kubectl get service / kubectl get pods / kubectl get deployments。

66. 通过ELK收集的日志需要如何才能通知到管理员?

答:将日志设置为提醒发送给Zabbix,然后就可以写脚本来发送短信/打电话给管理员。

67. 可以通过portainer来查看有哪些swarm集群。
68. 如何更新docker service版本?
更新
69. docker compose文件可以用Kompose工具(kompose convert)直接转换为k8s的文件来部署。【具体的部署可以看群里上传文件】然后用kubectl apply -f xxx.yaml来执行服务。
70. 通过kubectl cluster info就可以找到dashboard所在的位置,可以web访问。
71. k8s内部节点是可以用ping cluster-ip port来访问的(其中cluster-ip是通过kubectl get svc来获取的),但是无法使用telnet 真实的ip地址 port访问。当节点的类型变为NodePort之后,才能使用telnet访问。
72. k8s的节点都是内部的,需要开放gateway所在的节点给外部访问的话,需要gateway.yaml更新其node type(从clusterIp改为NodePort)。变了之后其port也会改变的,需要查询service列表来看新的端口号是多少。同时还需要添加proxy,这样才可以暴露服务出来给外部使用【需要google一下才能知道】。
修改
73. 三大运维工具对比,分别是zabbix,nagios和open-falcon
对比
74. zabbix有zabbix server和zabbix agent,其中server和mysql相连,agent相当于多个数据来源。
75. 对于传统的tomcat监控可以用probe这个工具(在github上有),但是这个工具不支持spring boot。
76. 容器的监控通过grafana+prometheus来做。也可以elk来监控日志。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容