Scaling Considerations

See also the 2.11 release guide for improvements included in the 2.11 release: 2.11 Commerce Release Guide - Performance Improvements Phase Iarchived

UPDATE (2/22): For the most current recommendations, please see Scaling for Flash Sales, Product Launches, and other Web Events.

 

Considerations already implemented

  1. Support for PayEezy

    1. Token now stored in database, not session

    2. Included in 2.11 and higher (see https://aspenware.atlassian.net/l/c/VQ8Jr5CL )

  2. Schedule Tasks replaced with Azure functions

    1. Delete Guests, Keep Alive, email processing, order processing

    2. Can all be delivered without a release

      1. Requires application service restart

Administration and Fulfillment System Changes

  1. Do not make changes in Aspenware Commerce Administration when scaled out

    1. If an admin makes any change in Aspenware Commerce when scaled out, it will only take effect on one application service/site in real time. 

      1. The other scaled out sites will not be updated with the change until the cache expires on that machine or an action is performed on that machine that causes the cache to clear.

        1. For example, if product inventory is cached for 5 minutes, then all instances will see updated values in 5 minutes (some could see it sooner, but all will see it after the cache expires).

        2. Please see Static Cache Guidelines below for information about cache duration.

    2. Some settings, such as Queue-It API key, customer ID, and secret, require an application service restart after any change (whether scaled or not).   See Queue-It Release Guide

    3. Customer profile details

      1. If customer profile details are changed in the fulfillment system (RTP|ONE or Siriusware) while the guest is shopping, the changes won’t be seen until the cache is refreshed.

Static Cache Guidelines

  1. 24 Hours:

    1. Product Classifications (ProductMetaDataTags) -> 24 hours

  2. 30 Minutes:

    1. ProductAttribute -> 30 min per product

    2. TerminalConfiguration -> 30 minutes

  3. By Setting:

    1. Inventory pools (Get Inventory For Month call) -> "ecommercesettings.productinventory.cachetime"

      1. NOTE: In the 2.12 release, coming in late October, inventory will be enhanced so it is retrieved from RTP|ONE less frequently, which will improve performance for inventoried products. 

    2. Dynamic pricing tables: yieldPriceListTable, yieldProductVariantTable, yieldDaysToArrivalTable -> "ecommercesettings.dynamicpricing.cachetime"

    3. Product Inventory (golf specific): -> "GolfSettings.ProductInventory.CacheTime"

  4. Logical:

    1. If catalog setting "CacheProductPrices" is set to true product prices are cached for 60 seconds

  5. 60 Minutes:

    1. ActivityLogType

    2. Category

    3. Category API Call (this call loads the category pages and PDP pages)

    4. CheckoutAttributes

    5. Currency

    6. Customer Household Information (name, birthdate, address, media codes, and gender, legacy contact id)

    7. CustomerRoles

    8. Discount

    9. DiscountRequirement

    10. Does a product have an attribute y/n (cached so we don't call the db to get attributes if the product doesn't have any)

    11. Languages

    12. LocalStringResource (language strings)

    13. LocalizedProperty

    14. PermissionRecord

    15. Picture (table)

    16. ProductCategory

    17. ProductManufacturer

    18. Settings

    19. SpecificationAttribute

    20. SpecificationAttributeOption

    21. Store (holds url and language info)

    22. StoreMapping

    23. TaxAddress

    24. TaxRate

    25. Url RecordsWidgets