spring相关知识

Spring Cloud 实战

2019-07-10  本文已影响0人  bernierayxu
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. 分布式事务包含哪几种解决方案?
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来监控日志。
上一篇下一篇

猜你喜欢

热点阅读