国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì)

這篇具有很好參考價(jià)值的文章主要介紹了破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

伴隨著業(yè)務(wù)的不斷發(fā)展,逐漸由單庫(kù)單表向分庫(kù)分表進(jìn)行發(fā)展。在這個(gè)過(guò)程中不可避免的一個(gè)問(wèn)題是確保主鍵要的唯一性,以便于后續(xù)的數(shù)據(jù)聚合、分析等等場(chǎng)景的使用。在進(jìn)行分庫(kù)分表的解決方案中有多種技術(shù)選型,大概分為兩大類客戶端分庫(kù)分表、服務(wù)端分庫(kù)分表。例如 Sharding-JDBC、ShardingSphere、 MyCat、 ShardingSphere-Proxy等等。

在這個(gè)燥熱的夏天,又突然收到告警,分庫(kù)分表的主鍵沖突了,這還能忍?不,堅(jiān)決不能忍,必須解決掉!后面咱們慢慢道來(lái)是如何破局的,如何走了一條坎坷路……

翻山第一步

咱們的系統(tǒng)使用的是ShardingSphere進(jìn)行分庫(kù)分表的,大概的配置信息如下: (出于信息的安全考慮,隱藏了部分信息,只保留的部分內(nèi)容,不要在意這些細(xì)節(jié)能說(shuō)明問(wèn)題即可)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:sharding="http://shardingsphere.apache.org/schema/shardingsphere/sharding"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans.xsd http://shardingsphere.apache.org/schema/shardingsphere/sharding http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding.xsd">

    <!--數(shù)據(jù)源-->
    <bean id="database1" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    </bean>
    <bean id="database2" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    </bean>
    <bean id="database3" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    </bean>

    <sharding:inline-strategy id="databaseStrategy" sharding-column="cloum1" algorithm-expression="table1_$->{(Math.abs(cloum1.hashCode()) % 512).intdiv(32) }" />
    <sharding:inline-strategy id="orderNoDatabaseStrategy" sharding-column="cloum2" algorithm-expression="table2_$->{(Math.abs(cloum2.hashCode()) % 512).intdiv(32) }" />
    <sharding:inline-strategy id="businessNoDatabaseStrategy" sharding-column="cloum3" algorithm-expression="table3_$->{(Math.abs(cloum3.hashCode()) % 512).intdiv(32) }" />
    <!-- 主鍵生成策略 -雪花算法-->
    <sharding:key-generator id="idKeyGenerator" type="SNOWFLAKE" column="id" props-ref="snowFlakeProperties"/>

    <sharding:data-source id="dataSource">
        <sharding:sharding-rule data-source-names="database1,database2,database3">
            <sharding:table-rules>

                <sharding:table-rule logic-table="table1"
                                     actual-data-nodes="database1_$->{0..15}.table1_$->{0..31}"
                                     database-strategy-ref="orderNoDatabaseStrategy"
                                     table-strategy-ref="order_waybill_tableStrategy"
                                     key-generator-ref="idKeyGenerator"/>

                <sharding:table-rule logic-table="table2"
                                     actual-data-nodes="database2_$->{0..15}.table2_$->{0..31}"
                                     database-strategy-ref="databaseStrategy"
                                     table-strategy-ref="waybill_contacts_tableStrategy"
                                     key-generator-ref="idKeyGenerator"/>

                <sharding:table-rule logic-table="table3"
                                     actual-data-nodes="database3_$->{0..15}.table3->{0..31}"
                                     database-strategy-ref="databaseStrategy"
                                     table-strategy-ref="waybill_tableStrategy"
                                     key-generator-ref="idKeyGenerator"/>
            </sharding:table-rules>
        </sharding:sharding-rule>
    </sharding:data-source>


    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:spring/mybatis-env-setting.xml"/>
        <property name="mapperLocations" value="classpath*:/mapper/*.xml"/>
    </bean>

</beans>

從上面的配置可以看出配置的是"SNOWFLAKE" 主鍵使用的是雪花算法,雪花算法產(chǎn)生的ID的組成總計(jì)64位,第一位為符號(hào)位不用,后41位為時(shí)間戳用于區(qū)別不同的時(shí)間點(diǎn),在后面10位為workId用于區(qū)別不同的機(jī)器,最后12位為sequence用于同一時(shí)刻同一機(jī)器的并發(fā)數(shù)量。

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

那接下來(lái)就看看咱們自己的系統(tǒng)是怎么配置的吧,其中的屬性snowFlakeProperties配置如下,其中的max.vibration.offset配置表示sequence的范圍為1024。按照正常的理解任何單個(gè)機(jī)器的配置都很難達(dá)到這個(gè)并發(fā)量,難道是這個(gè)值沒(méi)有生效?

    <sharding:key-generator id="idKeyGenerator" type="SNOWFLAKE" column="id" props-ref="snowFlakeProperties"/>

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

shardingsphere中實(shí)現(xiàn)獲取主鍵的實(shí)現(xiàn)源碼如下簡(jiǎn)述,具體的實(shí)現(xiàn)類org.apache.shardingsphere.core.strategy.keygen.SnowflakeShardingKeyGenerator,從源碼看源碼竟然一個(gè)日志都沒(méi)有,那讓咱們?cè)趺慈ヅ挪槟??怎么證明咱們的猜想是否正確的呢?囧……

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

真是敗也蕭何成也蕭何,shardingsphere是通過(guò)java的SPI的方式進(jìn)行的主鍵生成策略的擴(kuò)展。自定義實(shí)現(xiàn)方式如下:實(shí)現(xiàn)org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator接口,如果自己想要實(shí)現(xiàn)使用SPI方式進(jìn)行加載即可,那就讓咱們自己加日志吧,走你……

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

既然都自己寫(xiě)實(shí)現(xiàn)了,那日志就該加的都加吧,咱這絕不吝嗇這幾行日志

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

修改主鍵選擇生成策略為自己實(shí)現(xiàn)的類 type=“MYSNOWFLAKE”

    <sharding:key-generator id="idKeyGenerator" type="MYSNOWFLAKE" column="id" props-ref="snowFlakeProperties"/>

啟動(dòng)看日志,屬性中有max.vibration.offset=1024這個(gè)屬性,竟然依舊拿到的還是默認(rèn)的值1,驚訝中,細(xì)細(xì)一瞅,終究發(fā)現(xiàn)了問(wèn)題,在getProperty(key)時(shí)如果返回的不是String類型那么為null,進(jìn)而取值默認(rèn)值1。從咱們的系統(tǒng)配置中可以看到系統(tǒng)配置的int類型的的1024,所以取值默認(rèn)值1就說(shuō)通了。

INFO 2023-08-17 14:07:51.062 2174320.63604.16922524693996408 176557 com.jd.las.waybill.center.config.MySnowflakeShardingKeyGenerator.getMaxVibrationOffset(MySnowflakeShardingKeyGenerator.java:107) -- 選擇自定義的雪花算法獲取到的properties={"max.vibration.offset":1024,"worker.id":"217","max.tolerate.time.difference.milliseconds":"3000"}
INFO 2023-08-17 14:07:51.063 2174320.63604.16922524693996408 176558 com.jd.las.waybill.center.config.MySnowflakeShardingKeyGenerator.getMaxVibrationOffset(MySnowflakeShardingKeyGenerator.java:110) -- 選擇自定義的雪花算法獲取到的getMaxVibrationOffset=1

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

截止到目前主鍵重復(fù)的問(wèn)題終于可以解釋的通了,因?yàn)椴l(fā)支持的是0~1總共2個(gè)并發(fā),所以在生產(chǎn)系統(tǒng)中尤其出現(xiàn)生產(chǎn)波次的時(shí)候出現(xiàn)重復(fù)值的可能性是存在的,然后把1024變成字符串修改上線,相信系統(tǒng)后面應(yīng)該不會(huì)產(chǎn)生此類問(wèn)題了。

越嶺第二步

如果生活總是喜歡跟你開(kāi)玩笑,逗你玩,那你就配合它笑一笑吧。

當(dāng)上完線后,過(guò)了一段時(shí)間發(fā)現(xiàn)重復(fù)主鍵的問(wèn)題竟然依舊存在只是頻率少了些,不科學(xué)呀……

重新梳理思路,進(jìn)行更詳細(xì)的日志輸出,下單進(jìn)行驗(yàn)證,將接單落庫(kù)這坨代碼一并都加上日志以及觸發(fā)雪花算法的生成的ID也加上日志

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

通過(guò)日志分析,又又又發(fā)現(xiàn)"靈異事件",10條插入SQL,只有兩條觸發(fā)了shardingsphere的雪花算法,詫異的很呀~

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

查看其他8張表落庫(kù)的ID數(shù)據(jù)如下圖,ID(1692562397556875266) 都為1692開(kāi)頭且長(zhǎng)度20位,而shardingsphere產(chǎn)生的ID(899413419526356993)都為899開(kāi)頭且長(zhǎng)度19位,很明顯這8張表的主鍵不是shardingsphere生成的,那是這20位的數(shù)據(jù)哪來(lái)的呢???從ID上看明顯也不是自增產(chǎn)生的主鍵,又不科學(xué)了……

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

又是一個(gè)深夜……

梳理思路重新在鋝,主鍵相關(guān)的除了數(shù)據(jù)自增長(zhǎng)、shardingsphere配置的雪花還有唯一的一個(gè)相關(guān)的組件那就是mybatis,由于項(xiàng)目是很早之前的應(yīng)用了,使用的是baomidou的mybaits插件,如圖是插件的入口,MybatisSqlSessionFactoryBean實(shí)現(xiàn)FactoryBean, InitializingBean, ApplicationListener幾個(gè)Spring的接口

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

baomidou涉及該塊問(wèn)題的源碼如下:

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

如果GlobalConfig沒(méi)有配置workId和DataCenterId會(huì)使用無(wú)參構(gòu)造,默認(rèn)的workId

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

baomidou的雪花算法和shardingphere思路一致有一點(diǎn)點(diǎn)區(qū)別在于第12位和22位有datacenter<<17|workId<<12獲取,且datacenter和workId需要在0~31之間

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

不同機(jī)器的Name:

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

所以又解釋了為什么不同機(jī)器會(huì)出現(xiàn)相同的主鍵問(wèn)題,但是如果有細(xì)心的同學(xué)就會(huì)問(wèn)為啥10張表中有8張表走的是baomidou的雪花算法呢,那是因?yàn)閎aomidou會(huì)判斷保存的入?yún)?shí)體bean上是否有id字段,是否能匹配上該字段,如果存在則在baomidou這層就給賦值了baomidou雪花算法生產(chǎn)的ID,后續(xù)就不會(huì)再次觸發(fā)shardingsphere中ID生成,進(jìn)而導(dǎo)致該問(wèn)題。

截止到目前終于又解釋通了為什么跨機(jī)器會(huì)產(chǎn)生相同的主鍵問(wèn)題。

問(wèn)題的解決方式:

baomidou配置的過(guò)程中指定workId和centerDataId,但是需要確保centerDataId<<17|workId<<12確保唯一。類比shardingphere,借用shardingphere中的12~22位唯一數(shù),前5高位給(centerDataId<<17),后5低位給workId<<12;

破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì),數(shù)據(jù)庫(kù),分庫(kù)分表,主鍵沖突,ShardingSphere,數(shù)據(jù)庫(kù)

夜已沉默……

生產(chǎn)環(huán)境已上線驗(yàn)證通過(guò)

作者:京東物流 王義杰

來(lái)源:京東云開(kāi)發(fā)者社區(qū) 自猿其說(shuō)Tech 轉(zhuǎn)載請(qǐng)注明來(lái)源文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-682973.html

到了這里,關(guān)于破局主鍵重復(fù)問(wèn)題的坎坷路 | 京東物流技術(shù)團(tuán)隊(duì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 淺談常態(tài)化壓測(cè) | 京東物流技術(shù)團(tuán)隊(duì)

    淺談常態(tài)化壓測(cè) | 京東物流技術(shù)團(tuán)隊(duì)

    常態(tài)是指:“正常的狀態(tài)”;“化”在這里是表示轉(zhuǎn)變?yōu)槟撤N性質(zhì)或狀態(tài)。 “常態(tài)化”的含義就是:趨向正常的狀態(tài)。 那么常態(tài)化壓測(cè)顧名思義就可以解釋為,讓壓測(cè)趨于正常的狀態(tài),趨于合理 ;因此通過(guò)調(diào)研給了如下定義:常態(tài)化壓測(cè)是指在某個(gè)產(chǎn)品或系統(tǒng)上進(jìn)行自定義

    2024年02月16日
    瀏覽(23)
  • @ControllerAdvice注解使用及原理探究 | 京東物流技術(shù)團(tuán)隊(duì)

    @ControllerAdvice注解使用及原理探究 | 京東物流技術(shù)團(tuán)隊(duì)

    最近在新項(xiàng)目的開(kāi)發(fā)過(guò)程中,遇到了個(gè)問(wèn)題,需要將一些異常的業(yè)務(wù)流程返回給前端,需要提供給前端不同的響應(yīng)碼,前端再在次基礎(chǔ)上做提示語(yǔ)言的國(guó)際化適配。這些異常流程涉及業(yè)務(wù)層和控制層的各個(gè)地方,如果每個(gè)地方都寫(xiě)一些重復(fù)代碼顯得很冗余。 然后查詢解決方案

    2024年02月14日
    瀏覽(22)
  • Java單元測(cè)試及常用語(yǔ)句 | 京東物流技術(shù)團(tuán)隊(duì)

    Java單元測(cè)試及常用語(yǔ)句 | 京東物流技術(shù)團(tuán)隊(duì)

    編寫(xiě)Java單元測(cè)試用例,即把一段復(fù)雜的代碼拆解成一系列簡(jiǎn)單的單元測(cè)試用例,并且無(wú)需啟動(dòng)服務(wù),在短時(shí)間內(nèi)測(cè)試代碼中的處理邏輯。寫(xiě)好Java單元測(cè)試用例,其實(shí)就是把“復(fù)雜問(wèn)題簡(jiǎn)單化,建單問(wèn)題深入化“。在編寫(xiě)的過(guò)程中, 我們也可以對(duì)自己的代碼進(jìn)行一個(gè)二次檢查

    2024年02月10日
    瀏覽(25)
  • 快速理解DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)架構(gòu)思想-基礎(chǔ)篇 | 京東物流技術(shù)團(tuán)隊(duì)

    快速理解DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)架構(gòu)思想-基礎(chǔ)篇 | 京東物流技術(shù)團(tuán)隊(duì)

    本文與大家一起學(xué)習(xí)并介紹領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain Drive Design) 簡(jiǎn)稱DDD,以及為什么我們需要領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),它有哪些優(yōu)缺點(diǎn),盡量用一些通俗易懂文字來(lái)描述講解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),本篇并不會(huì)從深層大論述講解落地實(shí)現(xiàn),這些大家可以在了解入門(mén)后再去深層次學(xué)習(xí)探討或在后續(xù)進(jìn)階

    2024年02月09日
    瀏覽(26)
  • 庫(kù)存預(yù)占架構(gòu)升級(jí)方案設(shè)計(jì)-交易庫(kù)存中心 | 京東物流技術(shù)團(tuán)隊(duì)

    庫(kù)存預(yù)占架構(gòu)升級(jí)方案設(shè)計(jì)-交易庫(kù)存中心 | 京東物流技術(shù)團(tuán)隊(duì)

    伴隨物流行業(yè)的迅猛發(fā)展,一體化供應(yīng)鏈模式的落地,對(duì)系統(tǒng)吞吐、系統(tǒng)穩(wěn)定發(fā)出巨大挑戰(zhàn),庫(kù)存作為供應(yīng)鏈的重中之重表現(xiàn)更為明顯。近三年數(shù)據(jù)可以看出: 接入商家同比增長(zhǎng)37.64%、貨品種類同比增長(zhǎng)53.66% 貨品數(shù)量同比增長(zhǎng)46.43%、倉(cāng)庫(kù)數(shù)量同比增長(zhǎng)18.87% 通過(guò)分析過(guò)往大促

    2024年02月11日
    瀏覽(94)
  • 四層負(fù)載均衡的NAT模型與DR模型推導(dǎo) | 京東物流技術(shù)團(tuán)隊(duì)

    四層負(fù)載均衡的NAT模型與DR模型推導(dǎo) | 京東物流技術(shù)團(tuán)隊(duì)

    本文首先講述四層負(fù)載均衡技術(shù)的特點(diǎn),然后通過(guò)提問(wèn)的方式推導(dǎo)出四層負(fù)載均衡器的NAT模型和DR模型的工作原理。通過(guò)本文可以了解到四層負(fù)載均衡的技術(shù)特點(diǎn)、NAT模型和DR模型的工作原理、以及NAT模型和DR模型的優(yōu)缺點(diǎn)。讀者可以重點(diǎn)關(guān)注NAT模型到DR模型演進(jìn)的原因(一種技

    2024年02月10日
    瀏覽(20)
  • SpringCloud-Hystrix服務(wù)熔斷與降級(jí)工作原理&源碼 | 京東物流技術(shù)團(tuán)隊(duì)

    SpringCloud-Hystrix服務(wù)熔斷與降級(jí)工作原理&源碼 | 京東物流技術(shù)團(tuán)隊(duì)

    在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來(lái)拆分成一個(gè)個(gè)的服務(wù),服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來(lái)調(diào)用。為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)問(wèn)題,調(diào)用這

    2024年02月14日
    瀏覽(26)
  • CRM系統(tǒng)化整合從N-1做減法實(shí)踐 | 京東物流技術(shù)團(tuán)隊(duì)

    CRM系統(tǒng)化整合從N-1做減法實(shí)踐 | 京東物流技術(shù)團(tuán)隊(duì)

    京銷易系統(tǒng)已經(jīng)接入大網(wǎng)、KA以及云倉(cāng)三個(gè)條線商機(jī),每個(gè)條線商機(jī)規(guī)則差異比較大,當(dāng)前現(xiàn)狀是獨(dú)立實(shí)現(xiàn)三套系統(tǒng)分別做支撐。 2022年下半年CRM目標(biāo)是完成9個(gè)新條線業(yè)務(wù)接入,完成銷售過(guò)程線上化,實(shí)現(xiàn)銷售規(guī)則統(tǒng)一。 前端實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)與邏輯代碼耦合一起,無(wú)法復(fù)用,無(wú)

    2024年02月15日
    瀏覽(22)
  • 從iOS App啟動(dòng)速度看如何為基礎(chǔ)性能保駕護(hù)航 | 京東物流技術(shù)團(tuán)隊(duì)

    從iOS App啟動(dòng)速度看如何為基礎(chǔ)性能保駕護(hù)航 | 京東物流技術(shù)團(tuán)隊(duì)

    啟動(dòng)是App給用戶的第一印象,一款A(yù)pp的啟動(dòng)速度,不單單是用戶體驗(yàn)的事情,往往還決定了它能否獲取更多的用戶。所以到了一定階段App的啟動(dòng)優(yōu)化是必須要做的事情。App啟動(dòng)基本分為以下兩種 App 點(diǎn)擊啟動(dòng)前,它的進(jìn)程不在系統(tǒng)里,需要系統(tǒng)新創(chuàng)建一個(gè)進(jìn)程分配給它啟動(dòng)的

    2024年02月15日
    瀏覽(21)
  • 掌握MySQL分庫(kù)分表(六)解決主鍵重復(fù)問(wèn)題--Snowflake雪花算法

    掌握MySQL分庫(kù)分表(六)解決主鍵重復(fù)問(wèn)題--Snowflake雪花算法

    單庫(kù)下?般使用Mysql自增ID,但是分庫(kù)分表后,會(huì)造成不同分片上的數(shù)據(jù)表主鍵會(huì)重復(fù) 需求:性能強(qiáng)勁、全局唯一、防止惡意用戶規(guī)矩id的規(guī)則來(lái)獲取數(shù)據(jù) 利用自增id, 設(shè)置不同的?增步長(zhǎng): auto_increment_offset 、 auto-increment-increment 缺點(diǎn): 依靠數(shù)據(jù)庫(kù)系統(tǒng)的功能實(shí)現(xiàn),但是未來(lái)

    2024年02月09日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包