树根互联面试(部分)

一面

  • 流量比较大的情况下,使用kong有没有遇到过什么问题

二面

  • 我介绍项目中是先更新数据库后删除缓存。Q:如果删除缓存失败呢?A:重试。Q:一些敏感信息比如价格,读多写少的场景,要求缓存与数据库最大程度一致,如何实现?思考:分布式事务?Q:更新热点数据(因为原方案是先写mysql再删redis)造成缓存雪崩,怎么解?A:写时并不删缓存而是将其标记为过时,读时如果缓存中是过时数据则先将其返回,同时读数据库并将其更新到缓存。Q:如果业务要求0点以后读最新值而不是标记的值呢?

    • 我后面介绍系统改造为binlog+kafka同步的方案。Q:如果因为机器崩溃后重新调度等原因(未及时提交offset),造成读到老数据,怎么解?A:用时间戳或版本信息。
  • k8s的几个探针你是如何配置的?答案by newBing以及K8s–探针机制 : k8s的探针是用来对pod中容器的状态进行检测,有3种探针,存活探针、就绪探针、启动探针。探针的3种机制是HTTP GET、TCP Socket和Exec。其中,HTTP GET是最常用的一种,它会对容器的IP地址执行HTTP GET请求,如果响应的状态码大于等于200且小于400,则诊断被认为是成功的。
    就绪探针用来指示容器是否准备好为请求提供服务。如果探测失败,kubelet将该Pod提供的所有服务的endpoint列表中删除该Pod的 IP地址。
    存活探针用来指示容器是否正在运行。kubernetes根据存活探针来检查容器是否正常运行,若探测失败,则 kubelet 会杀死容器,并且容器将根据其重启策略去处理。
    1startup 探针与 readiness 探针类似,但它仅在启动时执行,能针对启动缓慢的容器或在初始化过程中有不可预测行为的应用程序进行优化。

与存活指针的区别在于,若容器未通过就绪探针检查,则不会被终止或重新启动。存活探针通过杀死异常的容器并用新的容器去替代他们的工作,而就绪探针确保只有就绪的pod才能在服务集群中。

1关于 readiness 探针有一点很重要,它会在容器的整个生命周期中运行。这意味着 readiness 探针不仅会在启动时运行,而且还会在Pod运行期间反复运行。这是为了处理应用程序暂时不可用的情况(比如加载大量数据、等待外部连接时)。在这种情况下,我们不一定要杀死应用程序,可以等待它恢复。readiness探针可用于检测这种情况,并在 Pod 再次通过 readiness 检查后,将流量发送到这些 Pod。Liveness探针用于重新启动不健康的容器。Kubelet 会定期地 ping liveness 探针,以确定健康状况,并在 liveness检查不通过的情况下杀死 Pod。liveness 检查可以帮助应用程序从死锁中恢复。

    • 加载本地缓存之前,你会如何设置探针状态?

  1. Kubernetes 探针详解! - 知乎 ↩︎ ↩︎

你可能感兴趣的:(面试,容器化,云原生,Service,Mesh,k8s探针,k8s,探针)