原创 分佈式系統中session一致性問題

業務場景 在單機系統中,用戶登陸之後,服務端會保存用戶的會話信息,只要用戶不退出重新登陸,在一段時間內用戶可以一直訪問該網站,無需重複登陸。用戶的信息存在服務端的 session 中,session中可以存放服務端需要的一些用戶信息,例如用

原创 分佈式系統中接口的冪等性

業務場景 公司有個借貸的項目,具體業務類似於阿里的螞蟻借唄,用戶在平臺上借款,然後規定一個到期時間,在該時間內用戶需將借款還清並收取一定的手續費,如果規定時間逾期未還上,則會產生滯納金。 用戶發起借款因此會產生一筆借款訂單,用戶可通過支付寶

原创 分佈式系統中一致性哈希算法

問題場景 近年來B2C、O2O等商業概念的提出和移動端的發展,使得分佈式系統流行了起來。分佈式系統相對於單系統,解決了流量大、系統高可用和高容錯等問題。功能強大也意味着實現起來需要更多技術的支持。例如系統訪問層的負載均衡,緩存層的多實例主從

原创 線程數究竟設多少合理

需求緣起 Web-Server通常有個配置,最大工作線程數,後端服務一般也有個配置,工作線程池的線程數量,這個線程數的配置不同的業務架構師有不同的經驗值,有些業務設置爲CPU核數的2倍,有些業務設置爲CPU核數的8倍,有些業務設置爲CPU核

原创 剖析 Elasticsearch 的索引原理

前言 創建索引的時候,我們通過Mapping 映射定義好索引的基本結構信息,接下來我們肯定需要往 ES 裏面新增業務文檔數據了,例如用戶,日誌等業務數據。新增的業務數據,我們根據 Mapping 來生成對應的倒排索引信息 。 我們一直說,E

原创 作爲程序員你是如何學習的?

學習的需要 這篇文章不做技術分享,和大家一起討論一下學習的途徑和方法。程序員行業技術更新迭代速度快,這個特點身爲行業內的每個猿友們都有深刻體會。 很多技術基本每年都有一個大小版本,每個版本的出現意味着有新的技術思想和應用技巧出現。也許你用不

原创 系統運行緩慢,CPU 100%,以及Full GC次數過多問題的排查思路

前言 處理過線上問題的同學基本上都會遇到系統突然運行緩慢,CPU 100%,以及Full GC次數過多的問題。當然,這些問題的最終導致的直觀現象就是系統運行緩慢,並且有大量的報警。 本文主要針對系統運行緩慢這一問題,提供該問題的排查思路,從

原创 Elasticsearch 的性能優化

硬件選擇 Elasticsearch(後文簡稱 ES)的基礎是 Lucene,所有的索引和文檔數據是存儲在本地的磁盤中,具體的路徑可在 ES 的配置文件../config/elasticsearch.yml中配置,如下: # -------

原创 Java7 和 Java8 中的 ConcurrentHashMap 原理解析

Java7 中 ConcurrentHashMap ConcurrentHashMap 和 HashMap 思路是差不多的,但是因爲它支持併發操作,所以要複雜一些。 整個 ConcurrentHashMap 由一個個 Segment 組成,

原创 程序員爲什麼會有職業瓶頸?

寒冬的思考 2019年初,俗話說"金三銀四"。這時候面試不知道你們慌不慌張。因爲2018年冬天是寒冷的。其實18年的低溫持續時間不算很長,我也沒有披上軍大衣。但是突如其來的互聯網寒冬影響了不少人,互聯網寒冬當然主要受影響的就是程序員了。 回

原创 Java 7 和 Java 8 中的 HashMap原理解析

HashMap 可能是面試的時候必問的題目了,面試官爲什麼都偏愛拿這個問應聘者?因爲 HashMap 它的設計結構和原理比較有意思,它既可以考初學者對 Java 集合的瞭解又可以深度的發現應聘者的數據結構功底。 閱讀前提:本文分析的是源碼,

原创 “三次握手,四次揮手”你真的懂嗎?

記得剛畢業找工作面試的時候,經常會被問到:你知道“3次握手,4次揮手”嗎?這時候我會“胸有成竹”地“背誦”前期準備好的“答案”,第一次怎麼怎麼,第二次……答完就沒有下文了,面試官貌似也沒有深入下去的意思,深入下去我也不懂,皆大歡喜! 作爲程

原创 互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失:第四篇

前情提示 上篇文章:《互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失:第三篇》,我們分析了 RabbitMQ 開啓手動ack機制保證消費端數據不丟失的時候,prefetch 機制對消費者的吞吐量以及內存消耗的影響。 通過分析,我

原创 互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失:第三篇

前情提示 上一篇文章:<<互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失:第二篇>>,我們分析了 ack 機制的底層實現原理(delivery tag機制),還有消除處理失敗時的nack機制如何觸發消息重發。 通過這個,已經讓大

原创 互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失:第二篇

前情提示 上一篇文章《互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失:第一篇》,我們初步介紹了之前制定的那些消息中間件數據不丟失的技術方案遺留的問題。 一個最大的問題,就是生產者投遞出去的消息,可能會丟失。 丟失的原因有很多,比