Spring Cloud 实战

作者: bernierayxu | 来源:发表于2019-07-10 14:04 被阅读0次
    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来监控日志。

    相关文章

      网友评论

        本文标题:Spring Cloud 实战

        本文链接:https://www.haomeiwen.com/subject/wgoxkctx.html